разбор простейшего шейдера.
вершинный:
uniform mat4 modelviewproj;
layout(location=VA_POSITION) in vec3 position;
void main(void)
{
gl_Position = modelviewproj * vec4(position,1.0);
}
в первой строке получаем стандартный юниформ. Это mvp матрица. Ее считает и посылает движок.
layout(location=VA_POSITION) in vec3 position; (пока layout(location=0))
здесь в вершинный шейдер передается один из аттрибутов вершины. а именно позиция. (все системные аттрибуты можно глянуть здесь:
http://code.google.com/p/axelynx/sou...ource/saSpec.h)
далее эта позиция в локальной системе координат множится на MVP матрицу - чтобы получить позицию вершины в нормированном кубе. Это такой куб (-1,-1,-1,1,1,1). потом к этой позиции применяется еще трансформация вьюпорта, чтобы получить позицию пикселя в оконных координатах.
out vec4 color;
void main (void)
{
color = vec4(1.0,0.0,0.0,1.0);
}
задается выходной аттрибут color.
и пишется в него значение.
если нужно несколько слоев (MRT), то можно использовать записи вида:
layout(location=0) vec4 color0;
layout(location=1) vec4 color1;
layout(location=2) vec4 color2;
layout(location=3) vec4 color3;
ну вот как то так.
HolyDel, а у тебя есть схема какая-нибудь которая показывает целиком архитектуру и устройство движка, чтобы было понятно как там все взаимосвязано и как работает?
|
нетъ
У тебя как хранение объектов организовано (в плане доступа к ним со стороны движка)?
|
храню указатель предков. динамическая типизация.
Просто я вот думаю, вот например есть объекты разных типов (шаблонные классы), и их нужно как то хранить в структуре похожей на связанный список. Но ведь связанные списки могут хранить объекты только одного типа. И я так понимаю что используя только статическую типизацию такой связанный список с объектами разного типа вообще нельзя сделать. Можно отказаться от шаблонов в пользу наследования, но гибкость теряется. Может разнотипные объекты как то по другому надо хранить?
|
шаблоны используются по минимому. мне вполне хватает наследования.