|
|
@ -237,13 +237,24 @@ void RasterizerOpenGL::DrawTriangles() { |
|
|
|
|
|
|
|
|
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, |
|
|
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, |
|
|
color_surface != nullptr ? color_surface->texture.handle : 0, 0); |
|
|
color_surface != nullptr ? color_surface->texture.handle : 0, 0); |
|
|
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, |
|
|
|
|
|
depth_surface != nullptr ? depth_surface->texture.handle : 0, 0); |
|
|
|
|
|
bool has_stencil = |
|
|
|
|
|
regs.framebuffer.framebuffer.depth_format == Pica::FramebufferRegs::DepthFormat::D24S8; |
|
|
|
|
|
glFramebufferTexture2D( |
|
|
|
|
|
GL_DRAW_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, |
|
|
|
|
|
(has_stencil && depth_surface != nullptr) ? depth_surface->texture.handle : 0, 0); |
|
|
|
|
|
|
|
|
if (depth_surface != nullptr) { |
|
|
|
|
|
if (regs.framebuffer.framebuffer.depth_format == |
|
|
|
|
|
Pica::FramebufferRegs::DepthFormat::D24S8) { |
|
|
|
|
|
// attach both depth and stencil
|
|
|
|
|
|
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, |
|
|
|
|
|
depth_surface->texture.handle, 0); |
|
|
|
|
|
} else { |
|
|
|
|
|
// attach depth
|
|
|
|
|
|
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, |
|
|
|
|
|
depth_surface->texture.handle, 0); |
|
|
|
|
|
// clear stencil attachment
|
|
|
|
|
|
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, 0); |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
// clear both depth and stencil attachment
|
|
|
|
|
|
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, |
|
|
|
|
|
0); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// Sync the viewport
|
|
|
// Sync the viewport
|
|
|
// These registers hold half-width and half-height, so must be multiplied by 2
|
|
|
// These registers hold half-width and half-height, so must be multiplied by 2
|
|
|
|