|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jul 2007
Сообщений: 15
|
Использование текстур в шейдерах, где они (текстуры) не нужны
Одновременно пытаюсь отрисовать несколько объектов – цветные и текстурированные.
Есть массив _programs композиционных объектов, в которых храню шейдеры, модели (вершины, индексы) и текстуры. На этапе инициализации для каждого объекта создаю программу, в неё загружаю шейдеры и, если нужно, в контекст под соответствующим индексом текстуры. Эту программу добавляю в объект. Затем каждый кадр перебираю массив _programs. Включаю нужную программу, создаю буфферы и т.д. Код ниже. Ругается на тот шейдер, который не использует текстуру, так: Цитата:
Инициализация: ... for each (var item:Program in _programs) { for (var name:String in item.wrapper.textures) { var bm:Bitmap = item.wrapper.textures[name]; var texture:Texture = context3D.createTexture(bm.width, bm.height, Context3DTextureFormat.BGRA, true); context3D.setTextureAt(parseInt(name), generateMipmaps(texture, bm.bitmapData)); } } ... ... for (var i:uint = 0; i < _programs.length; i++) { context3D.setProgram(_programs[i].program); var meshVertexData:Vector.<Number> = _programs[i].wrapper.model.vertexes; var vertexBuffer:VertexBuffer3D = createVertexBuffer(meshVertexData, context3D); var meshIndexData:Vector.<uint> = _programs[i].wrapper.model.indexes; var indexBuffer:IndexBuffer3D = createIndexBuffer(meshIndexData, context3D); context3D.setVertexBufferAt(0, vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_4); context3D.setVertexBufferAt(1, vertexBuffer, 4, Context3DVertexBufferFormat.FLOAT_2); context3D.setVertexBufferAt(2, vertexBuffer, 6, Context3DVertexBufferFormat.FLOAT_4); context3D.drawTriangles(indexBuffer, 0, meshIndexData.length / 3); } ... "m44 op, va0, vc0\n" + "mov v0, va0\n"+ "mov v1, va1\n"+ "mov v2, va2\n", "tex oc, v1, fs0 <2d,repeat,miplinear>\n" P.S. Кстати, если добавить в бестекстурный шейдер бесполезную строку , всё работает. |
|
|||||
Регистрация: Jul 2007
Сообщений: 15
|
Привет =)
Установка в нулл имеется в виду: ? Проверил, работает, спасибо. Только вот вопрос, как же я узнаю, сколько в предыдущем цикле текстур было использовано? Заводить для этого отдельную uint-перемнную? Последний раз редактировалось Frankie Wilde; 27.06.2012 в 17:03. |
Часовой пояс GMT +4, время: 13:26. |
|
« Предыдущая тема | Следующая тема » |
Теги |
текстура , шейдер |
|
|