Publish @Zeux: Кто рендеры писал…

People in this conversation:
Simon Kozlov Add
Zeux Add

Zeux: @All
Работать с OGRE сплошное удовольствие, столько фана! Вот тут странный баг на ipad – есть код который делает texture compositing для персонажей, запекая все в одну текстуру в рантайме. И вот достаточно редко (типа 1 из 10 запусков) на одном из персонажей текстурка серая (ее clear color – серый, т.е. ощущение, что ничего не рисуется). После определенного количества дебага выяснилось, что при загрузке текстур не степени двойки через Ogre в OpenGL ES делается glClear текущим цветом (соответственно, есть timing condition – если пока FBO composit текстуры еще активен решить что нам срочно нужно загрузить текстуру определенных размеров, то проявляется баг). И вот почему! (ценители OpenGL оценят)

Есть код, который блитает из текстуры в текстуру методом “временно привязать target текстуру к FBO и нарисовать квад с первой текстурой”. Он зачем-то дергается при загрузке текстуры с несовпадающими размерами (типа хотели 143×127, а пришлось 256×128). Вот код из desktop opengl:

void GLTextureBuffer::blitFromTexture(GLTextureBuffer *src, const Image::Box &srcBox, const Image::Box &dstBox)
{
/// Store reference to FBO manager
GLFBOManager *fboMan = static_cast<GLFBOManager *>(GLRTTManager::getSingletonPtr());

/// Save and clear GL state for rendering
glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT | GL_DEPTH_BUFFER_BIT | GL_ENABLE_BIT |
GL_FOG_BIT | GL_LIGHTING_BIT | GL_POLYGON_BIT | GL_SCISSOR_BIT | GL_STENCIL_BUFFER_BIT |
GL_TEXTURE_BIT | GL_VIEWPORT_BIT);

Вот эквивалент на OpenGL ES:

void GLESTextureBuffer::blitFromTexture(GLESTextureBuffer *src, const Image::Box &srcBox, const Image::Box &dstBox)
{
// Store reference to FBO manager
GLESFBOManager *fboMan = static_cast<GLESFBOManager *>(GLESRTTManager::getSingletonPtr());

// Save and clear GL state for rendering
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

Simon Kozlov: reply @Zeux
То есть, пацаны когда портировали не знали чем заменить glPushAttrib и нашли glClear?
Потому что мол некоторые флаги туда пролазят и в комментариях что-то про clear говорится?

Zeux: reply @Simon Kozlov
Ну да. Save не получилось так хоть clear сделаем!

This happened on #gamedeff

  • false3d

    Да, круто портировали… Я было на секунду подумал что glPushAttrib каким-то магическим образом и очистку у них делает =)