Тема: axelynx
Показать сообщение отдельно
Старый 13.07.2012, 09:03   #290
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: axelynx

Сообщение от HolyDel Посмотреть сообщение
знать бы еще как)))
у тебя есть VAO в котором указано где лежит позиция например.
теперь ето число ты должен скормить шейдеру, так?
либо через BindAttribute либо через layout(location=) в тексте шейдера?
Без вао. По моим тестам, оно производительности не дает.
void CStaticMesh::draw(CShader* shader)
{

	RENDER->bindBuffer(_vbo, BT_ARRAY);
	RENDER->vertexAttribPointer(shader->getPositionAttrib(), 3, RENDER->oFLOAT(), RENDER->oFALSE(),  sizeof(Vertex), (const void*)0);
	if(shader->getNormalAttrib() != -1) RENDER->vertexAttribPointer(shader->getNormalAttrib(), 3, RENDER->oFLOAT(),  RENDER->oFALSE(),sizeof(Vertex), (const void*)12);
	if(shader->getTexcoordAttrib() != -1)RENDER->vertexAttribPointer(shader->getTexcoordAttrib(), 2, RENDER->oFLOAT(), RENDER->oFALSE(), sizeof(Vertex), (const void*)24);

	RENDER->bindBuffer(_ibo, BT_ELEMENT);
	RENDER->drawElements(RENDER->oTRIANGLES(), _icount, RENDER->oUNSIGNED_SHORT(), 0);
}
Тут чуть-чуть мой синтаксис... но думаю понятно
shader->getPositionAttrib() и подобные функции хранят локации в шейдере. Перед любым действием с шейдером, его нужно забиндить если он не текущий
А и еще перед биндом нового шейдера дизаблить старые атрибуты, и энаблить атрибуты нового шейдера.
(Offline)
 
Ответить с цитированием