Skip to content

Commit 06f6538

Browse files
committed
Fix depth buffer creation on OpenGL ES
1 parent 1cdc7d8 commit 06f6538

File tree

4 files changed

+57
-33
lines changed

4 files changed

+57
-33
lines changed

ouzel/graphics/opengl/TextureResourceOGL.cpp

Lines changed: 46 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -311,16 +311,16 @@ namespace ouzel
311311
if (!levels[level].data.empty())
312312
{
313313
glTexImage2DProc(GL_TEXTURE_2D, static_cast<GLint>(level), static_cast<GLint>(oglInternalPixelFormat),
314-
static_cast<GLsizei>(levels[level].size.width),
315-
static_cast<GLsizei>(levels[level].size.height), 0,
316-
oglPixelFormat, oglPixelType, levels[level].data.data());
314+
static_cast<GLsizei>(levels[level].size.width),
315+
static_cast<GLsizei>(levels[level].size.height), 0,
316+
oglPixelFormat, oglPixelType, levels[level].data.data());
317317
}
318318
else
319319
{
320320
glTexImage2DProc(GL_TEXTURE_2D, static_cast<GLint>(level), static_cast<GLint>(oglInternalPixelFormat),
321-
static_cast<GLsizei>(levels[level].size.width),
322-
static_cast<GLsizei>(levels[level].size.height), 0,
323-
oglPixelFormat, oglPixelType, nullptr);
321+
static_cast<GLsizei>(levels[level].size.width),
322+
static_cast<GLsizei>(levels[level].size.height), 0,
323+
oglPixelFormat, oglPixelType, nullptr);
324324
}
325325
}
326326

@@ -352,10 +352,10 @@ namespace ouzel
352352
if (!levels[level].data.empty())
353353
{
354354
glTexSubImage2DProc(GL_TEXTURE_2D, static_cast<GLint>(level), 0, 0,
355-
static_cast<GLsizei>(levels[level].size.width),
356-
static_cast<GLsizei>(levels[level].size.height),
357-
oglPixelFormat, oglPixelType,
358-
levels[level].data.data());
355+
static_cast<GLsizei>(levels[level].size.width),
356+
static_cast<GLsizei>(levels[level].size.height),
357+
oglPixelFormat, oglPixelType,
358+
levels[level].data.data());
359359
}
360360
}
361361

@@ -596,11 +596,14 @@ namespace ouzel
596596
renderDevice.bindTexture(textureId, 0);
597597

598598
glTexImage2DProc(GL_TEXTURE_2D, 0, static_cast<GLint>(oglInternalPixelFormat),
599-
width, height, 0,
600-
oglPixelFormat, oglPixelType, nullptr);
599+
width, height, 0,
600+
oglPixelFormat, oglPixelType, nullptr);
601601

602602
// TODO: blit multisample render buffer to texture
603603
glFramebufferTexture2DProc(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId, 0);
604+
605+
if ((error = glGetErrorProc()) != GL_NO_ERROR)
606+
throw DataError("Failed to set frame buffer's color texture, error: " + std::to_string(error));
604607
}
605608
else
606609
{
@@ -610,17 +613,26 @@ namespace ouzel
610613
if (sampleCount > 1 && renderDevice.isMultisamplingSupported())
611614
{
612615
glRenderbufferStorageMultisampleProc(GL_RENDERBUFFER,
613-
static_cast<GLsizei>(sampleCount),
614-
oglInternalPixelFormat,
615-
width, height);
616+
static_cast<GLsizei>(sampleCount),
617+
oglInternalPixelFormat,
618+
width, height);
619+
620+
if ((error = glGetErrorProc()) != GL_NO_ERROR)
621+
throw DataError("Failed to set color render buffer's multisample storage, error: " + std::to_string(error));
616622
}
617623
else
618624
{
619625
glRenderbufferStorageProc(GL_RENDERBUFFER, oglInternalPixelFormat,
620-
width, height);
626+
width, height);
627+
628+
if ((error = glGetErrorProc()) != GL_NO_ERROR)
629+
throw DataError("Failed to set color render buffer's storage, error: " + std::to_string(error));
621630
}
622631

623632
glFramebufferRenderbufferProc(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorBufferId);
633+
634+
if ((error = glGetErrorProc()) != GL_NO_ERROR)
635+
throw DataError("Failed to set frame buffer's color render buffer, error: " + std::to_string(error));
624636
}
625637

626638
if (flags & Texture::DEPTH_BUFFER)
@@ -632,9 +644,12 @@ namespace ouzel
632644
renderDevice.bindTexture(depthTextureId, 0);
633645

634646
glTexImage2DProc(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24,
635-
width, height, 0,GL_DEPTH_COMPONENT, GL_FLOAT, nullptr);
647+
width, height, 0,GL_DEPTH_COMPONENT, GL_FLOAT, nullptr);
636648

637649
glFramebufferTexture2DProc(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthTextureId, 0);
650+
651+
if ((error = glGetErrorProc()) != GL_NO_ERROR)
652+
throw DataError("Failed to set frame buffer's depth texture, error: " + std::to_string(error));
638653
}
639654
else
640655
{
@@ -644,17 +659,26 @@ namespace ouzel
644659
if (sampleCount > 1 && renderDevice.isMultisamplingSupported())
645660
{
646661
glRenderbufferStorageMultisampleProc(GL_RENDERBUFFER,
647-
static_cast<GLsizei>(sampleCount),
648-
GL_DEPTH_COMPONENT,
649-
width, height);
662+
static_cast<GLsizei>(sampleCount),
663+
GL_DEPTH_COMPONENT24,
664+
width, height);
665+
666+
if ((error = glGetErrorProc()) != GL_NO_ERROR)
667+
throw DataError("Failed to set depth render buffer's multisample storage, error: " + std::to_string(error));
650668
}
651669
else
652670
{
653-
glRenderbufferStorageProc(GL_RENDERBUFFER, GL_DEPTH_COMPONENT,
654-
width, height);
671+
glRenderbufferStorageProc(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24,
672+
width, height);
673+
674+
if ((error = glGetErrorProc()) != GL_NO_ERROR)
675+
throw DataError("Failed to set depth render buffer's storage, error: " + std::to_string(error));
655676
}
656677

657678
glFramebufferRenderbufferProc(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBufferId);
679+
680+
if ((error = glGetErrorProc()) != GL_NO_ERROR)
681+
throw DataError("Failed to set frame buffer's depth render buffer, error: " + std::to_string(error));
658682
}
659683
}
660684

ouzel/graphics/opengl/ios/RenderDeviceOGLIOS.mm

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ static void renderCallback(void* userInfo)
146146
if ((error = glGetErrorProc()) != GL_NO_ERROR)
147147
throw SystemError("Failed to blit MSAA texture, error: " + std::to_string(error));
148148

149-
// reset framebuffer
149+
// reset frame buffer
150150
const GLenum discard[] = {GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT};
151151
glDiscardFramebufferEXTProc(GL_READ_FRAMEBUFFER_APPLE, 1, discard);
152152

@@ -209,7 +209,7 @@ static void renderCallback(void* userInfo)
209209
GLenum status = glCheckFramebufferStatusProc(GL_FRAMEBUFFER);
210210

211211
if (status != GL_FRAMEBUFFER_COMPLETE)
212-
throw SystemError("Failed to create framebuffer object, status: " + std::to_string(status));
212+
throw SystemError("Failed to create frame buffer object, status: " + std::to_string(status));
213213

214214
// create MSAA frame buffer
215215
glGenFramebuffersProc(1, &msaaFrameBufferId);
@@ -234,7 +234,7 @@ static void renderCallback(void* userInfo)
234234
status = glCheckFramebufferStatusProc(GL_FRAMEBUFFER);
235235

236236
if (status != GL_FRAMEBUFFER_COMPLETE)
237-
throw SystemError("Failed to create framebuffer object, status: " + std::to_string(status));
237+
throw SystemError("Failed to create frame buffer object, status: " + std::to_string(status));
238238

239239
frameBufferId = msaaFrameBufferId;
240240
}
@@ -264,7 +264,7 @@ static void renderCallback(void* userInfo)
264264
GLenum status = glCheckFramebufferStatusProc(GL_FRAMEBUFFER);
265265

266266
if (status != GL_FRAMEBUFFER_COMPLETE)
267-
throw SystemError("Failed to create framebuffer object, status: " + std::to_string(status));
267+
throw SystemError("Failed to create frame buffer object, status: " + std::to_string(status));
268268

269269
frameBufferId = resolveFrameBufferId;
270270
}

ouzel/graphics/opengl/linux/RenderDeviceOGLLinux.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ namespace ouzel
9393
0
9494
};
9595

96-
std::unique_ptr<GLXFBConfig, int(*)(void*)> framebufferConfig(glXChooseFBConfig(engineLinux->getDisplay(), screenIndex, attributes, &fbcount), XFree);
97-
if (framebufferConfig)
96+
std::unique_ptr<GLXFBConfig, int(*)(void*)> frameBufferConfig(glXChooseFBConfig(engineLinux->getDisplay(), screenIndex, attributes, &fbcount), XFree);
97+
if (frameBufferConfig)
9898
{
9999
PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsProc = reinterpret_cast<PFNGLXCREATECONTEXTATTRIBSARBPROC>(glXGetProcAddress(reinterpret_cast<const GLubyte*>("glXCreateContextAttribsARB")));
100100

@@ -116,7 +116,7 @@ namespace ouzel
116116

117117
contextAttribs.push_back(0);
118118

119-
context = glXCreateContextAttribsProc(engineLinux->getDisplay(), *framebufferConfig, nullptr, True, contextAttribs.data());
119+
context = glXCreateContextAttribsProc(engineLinux->getDisplay(), *frameBufferConfig, nullptr, True, contextAttribs.data());
120120

121121
if (context)
122122
{

ouzel/graphics/opengl/tvos/RenderDeviceOGLTVOS.mm

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ static void renderCallback(void* userInfo)
140140
if ((error = glGetErrorProc()) != GL_NO_ERROR)
141141
throw SystemError("Failed to blit MSAA texture, error: " + std::to_string(error));
142142

143-
// reset framebuffer
143+
// reset frame buffer
144144
const GLenum discard[] = {GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT};
145145
glDiscardFramebufferEXTProc(GL_READ_FRAMEBUFFER_APPLE, 1, discard);
146146

@@ -203,7 +203,7 @@ static void renderCallback(void* userInfo)
203203
GLenum status = glCheckFramebufferStatusProc(GL_FRAMEBUFFER);
204204

205205
if (status != GL_FRAMEBUFFER_COMPLETE)
206-
throw SystemError("Failed to create framebuffer object, status: " + std::to_string(status));
206+
throw SystemError("Failed to create frame buffer object, status: " + std::to_string(status));
207207

208208
// create MSAA frame buffer
209209
glGenFramebuffersProc(1, &msaaFrameBufferId);
@@ -228,7 +228,7 @@ static void renderCallback(void* userInfo)
228228
status = glCheckFramebufferStatusProc(GL_FRAMEBUFFER);
229229

230230
if (status != GL_FRAMEBUFFER_COMPLETE)
231-
throw SystemError("Failed to create framebuffer object, status: " + std::to_string(status));
231+
throw SystemError("Failed to create frame buffer object, status: " + std::to_string(status));
232232

233233
frameBufferId = msaaFrameBufferId;
234234
}
@@ -258,7 +258,7 @@ static void renderCallback(void* userInfo)
258258
GLenum status = glCheckFramebufferStatusProc(GL_FRAMEBUFFER);
259259

260260
if (status != GL_FRAMEBUFFER_COMPLETE)
261-
throw SystemError("Failed to create framebuffer object, status: " + std::to_string(status));
261+
throw SystemError("Failed to create frame buffer object, status: " + std::to_string(status));
262262

263263
frameBufferId = resolveFrameBufferId;
264264
}

0 commit comments

Comments
 (0)