Сообщение от 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() и подобные функции хранят локации в шейдере. Перед любым действием с шейдером, его нужно забиндить если он не текущий
А и еще перед биндом нового шейдера дизаблить старые атрибуты, и энаблить атрибуты нового шейдера.