Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.02.2011, 16:19
gr_crd вне форума Посмотреть профиль Отправить личное сообщение для gr_crd Посетить домашнюю страницу gr_crd Найти все сообщения от gr_crd
  № 1  
Ответить с цитированием
gr_crd
 
Аватар для gr_crd

Регистрация: Mar 2009
Адрес: Kazakhstan, Almaty
Сообщений: 121
Question Правильное задание параметров для шейдера (2 input изображения)

(Выбрал раздел AS3, потомучто по созданию шейдера нет вопроса - вопрос по ошибке в AS3)

Сложилась следующая ситуация.
Есть шейдер. (просто для теста)

Код:
<languageVersion : 1.0;>

kernel test
<   namespace : "_";
    vendor : "_";
    version : 1;
    description : "test"; >
{
   input image4 src1;
   input image4 src2;
   output pixel4 dst;
   
   void evaluatePixel()
   {
        dst = sampleNearest(src2,float2(outCoord().x,outCoord().y));
   }
}
нужно задать для него входные параметры — два изображения (src1, src2)

читаю в хелпе:

However, in some cases, especially if a shader defines multiple inputs, you do explicitly set a value for an input. Each input that is defined in a shader is represented in ActionScript by a ShaderInput object. The ShaderInput object is a property of the ShaderData instance in the Shader object’s data property, as described in Identifying shader inputs and parameters. For example, suppose a shader defines an input named src, and that shader is linked to a Shader object named myShader. In that case you access the ShaderInput object corresponding to the src input using the following identifier:

myShader.data.src

я так понял — myShader - Shader, src — имя параметра (в моем случае src1, src2)

пробую таим способом:

Код AS3:
var shdInput1:ShaderInput=new ShaderInput();
var shdInput2:ShaderInput=new ShaderInput();
shdInput1.input=img1.bitmapData;
shdInput2.input=img2.bitmapData;
//
shader.data.src1=shdInput1;
shader.data.src2=shdInput2;
далее:

Код AS3:
var sf:ShaderFilter=new ShaderFilter(shader);
//
someBitmap.filters=[sf];
ошибка:
Код:
ArgumentError: Error #2163: Тип входа шейдера src1 не совместим с этой операцией.
	at flash.display::DisplayObject/set filters()
ок, нашел на одном форуме такую запись:
Код AS3:
shader.data.src.input = new Autumn(0,0);//set the input
Autumn - BitmapData.

пробую:
Код AS3:
shader.data.src1.input=img1.bitmapData;
shader.data.src2.input=img2.bitmapData;
ошибка:
Код:
TypeError: Error #1010: Термин не определен и не имеет свойств.
пробую без input:
Код AS3:
shader.data.src1=img1.bitmapData;
shader.data.src2=img2.bitmapData;
ошибка:
Код:
ArgumentError: Error #2167: Для этой операции шейдер не имеет требуемого количества входов.
	at flash.display::DisplayObject/set filters()
вот что дает trace
Код AS3:
var shdData:ShaderData=shader.data;
for (var prop:String in shdData) 
{ 
   trace(shdData[prop]);
}
Код:
_
test
[object BitmapData]
test
1
[object BitmapData]
_
т.е. я так понял, два [object BitmapData], каких еще входов не хватает?

на Adobe Forums нашел похожий пост. Там проблема решилась путем добавления input
Код AS3:
shader.data.src1.input
но в моем случае не помогло.

Еще пишут:
Цитата:
because you weren't using the input, it was removed as a compiler optimization for Flash. We should have given you a warning there, so that is our bad. I'll file a bug.
Но в другом шейдере, ранее, я использовал оба изображения — возникали те же самые ошибки, что и сегодня.

Вот... Где я ошибаюсь? Как правильно задать эти параметры?

ps. на всякий случай весь код

Код AS3:
package 
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Shader;
	import flash.display.ShaderData;
	import flash.display.ShaderInput;
	import flash.display.ShaderJob;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.filters.ShaderFilter;
 
	/**
	 * ...
	 * @author criadone
	 */
	public class Main extends Sprite 
	{
 
		[Embed(source="../test1.pbj", mimeType="application/octet-stream")]
		private var ShaderClass:Class;
 
		[Embed(source = "../image1.jpg")]
		private var Source1:Class;
		private var img1:Bitmap=new Source1();
 
		[Embed(source = "../image2.jpg")]
		private var Source2:Class;
		private var img2:Bitmap=new Source2();
 
		private var shader:Shader;
		private var sf:ShaderFilter;
		private var someBitmap:Bitmap;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			//
			someBitmap=new Bitmap(new BitmapData(640,480,false,0x303030));
			addChild(someBitmap);
			//
			shader = new Shader();
			shader.byteCode = new ShaderClass();
			//
			var shdInput1:ShaderInput=new ShaderInput();
			var shdInput2:ShaderInput=new ShaderInput();
			shdInput1.input=img1.bitmapData;
			shdInput2.input=img2.bitmapData;
			//
			shader.data.src1=img1.bitmapData;
			shader.data.src2=img2.bitmapData;
 
			var shdData:ShaderData=shader.data;
 
			for (var prop:String in shdData) 
			{ 
				trace(shdData[prop]);
			}
 
			//
			var sf:ShaderFilter=new ShaderFilter(shader);
			//
			someBitmap.filters=[sf];
			//1
		}
 
	}
}
__________________
заткнись и делай

Старый 14.02.2011, 16:27
arkadattx вне форума Посмотреть профиль Отправить личное сообщение для arkadattx Найти все сообщения от arkadattx
  № 2  
Ответить с цитированием
arkadattx

Регистрация: Apr 2010
Сообщений: 219
Так для пиксель-бендера свой раздел есть.
К сожалению по сабжу не компетентен.

Старый 14.02.2011, 17:40
gr_crd вне форума Посмотреть профиль Отправить личное сообщение для gr_crd Посетить домашнюю страницу gr_crd Найти все сообщения от gr_crd
  № 3  
Ответить с цитированием
gr_crd
 
Аватар для gr_crd

Регистрация: Mar 2009
Адрес: Kazakhstan, Almaty
Сообщений: 121
все, разобрался.
запись вида
Код AS3:
shader.data.src1.input
правильна.

просто один из инпутов и вправду не использовался и был проигнорирован при компиляции.
__________________
заткнись и делай

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:56.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
error , input , Shader , shaderInput

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:56.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.