Skip to content

Commit

Permalink
Merge pull request hrydgard#3170 from raven02/patch-17
Browse files Browse the repository at this point in the history
Few more boolean fix
  • Loading branch information
hrydgard committed Aug 14, 2013
2 parents b2b4c92 + 2dd75b5 commit 169cc63
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 46 deletions.
73 changes: 28 additions & 45 deletions GPU/GLES/Framebuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,21 @@ void CenterRect(float *x, float *y, float *w, float *h,
}
}

void ClearBuffer() {
glstate.depthWrite.set(GL_TRUE);
glstate.colorMask.set(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
}

void DisableState() {
glstate.blend.disable();
glstate.cullFace.disable();
glstate.depthTest.disable();
glstate.scissorTest.disable();
glstate.stencilTest.disable();
}

void FramebufferManager::CompileDraw2DProgram() {
if (!draw2dprogram) {
draw2dprogram = glsl_create_source(basic_vs, tex_fs);
Expand Down Expand Up @@ -167,12 +182,9 @@ FramebufferManager::FramebufferManager() :

// And an initial clear. We don't clear per frame as the games are supposed to handle that
// by themselves.
glstate.depthWrite.set(GL_TRUE);
glstate.colorMask.set(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
ClearBuffer();

useBufferedRendering_ = g_Config.iRenderingMode != FB_NON_BUFFERED_MODE ? 1 : 0;
useBufferedRendering_ = g_Config.iRenderingMode != FB_NON_BUFFERED_MODE;

// Check vendor string to try and guess GPU
const char *cvendor = (char *)glGetString(GL_VENDOR);
Expand Down Expand Up @@ -549,10 +561,7 @@ void FramebufferManager::SetRenderFrameBuffer() {
vfb->last_frame_used = gpuStats.numFlips;
frameLastFramebufUsed = gpuStats.numFlips;
vfbs_.push_back(vfb);
glstate.depthWrite.set(GL_TRUE);
glstate.colorMask.set(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
ClearBuffer();
glEnable(GL_DITHER);
currentRenderVfb_ = vfb;

Expand All @@ -564,7 +573,7 @@ void FramebufferManager::SetRenderFrameBuffer() {
bool useMem = g_Config.iRenderingMode == FB_READFBOMEMORY_GPU || g_Config.iRenderingMode == FB_READFBOMEMORY_CPU;
#else
bool useMem = g_Config.iRenderingMode == FB_READFBOMEMORY_GPU;
#endif
#endif
if(useMem && !vfb->memoryUpdated) {
ReadFramebufferToMemory(vfb, true);
}
Expand Down Expand Up @@ -615,10 +624,7 @@ void FramebufferManager::SetRenderFrameBuffer() {
// FBO in a frame. This means that some games won't be able to avoid the on-some-GPUs
// performance-crushing framebuffer reloads from RAM, but we'll have to live with that.
if (vfb->last_frame_used != gpuStats.numFlips) {
glstate.depthWrite.set(GL_TRUE);
glstate.colorMask.set(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
frame_clearing();
}
#endif
currentRenderVfb_ = vfb;
Expand Down Expand Up @@ -650,10 +656,7 @@ void FramebufferManager::CopyDisplayToOutput() {
} else {
DEBUG_LOG(HLE, "Found no FBO to display! displayFBPtr = %08x", displayFramebufPtr_);
// No framebuffer to display! Clear to black.
glstate.depthWrite.set(GL_TRUE);
glstate.colorMask.set(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
ClearBuffer();
}
return;
}
Expand All @@ -672,11 +675,7 @@ void FramebufferManager::CopyDisplayToOutput() {
if (vfb->fbo) {
glstate.viewport.set(0, 0, PSP_CoreParameter().pixelWidth, PSP_CoreParameter().pixelHeight);
DEBUG_LOG(HLE, "Displaying FBO %08x", vfb->fb_address);
glstate.blend.disable();
glstate.cullFace.disable();
glstate.depthTest.disable();
glstate.scissorTest.disable();
glstate.stencilTest.disable();
DisableState();

fbo_bind_color_as_texture(vfb->fbo, 0);

Expand All @@ -688,10 +687,7 @@ void FramebufferManager::CopyDisplayToOutput() {
}

if (resized_) {
glstate.depthWrite.set(GL_TRUE);
glstate.colorMask.set(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
ClearBuffer();
}
}

Expand Down Expand Up @@ -773,13 +769,8 @@ void FramebufferManager::ReadFramebufferToMemory(VirtualFramebuffer *vfb, bool s

nvfb->last_frame_used = gpuStats.numFlips;
bvfbs_.push_back(nvfb);

fbo_bind_as_render_target(nvfb->fbo);

glstate.depthWrite.set(GL_TRUE);
glstate.colorMask.set(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glClearColor(0.0f,0.0f,0.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
ClearBuffer();
glEnable(GL_DITHER);
} else {
nvfb->usageFlags |= FB_USAGE_RENDERTARGET;
Expand All @@ -794,10 +785,7 @@ void FramebufferManager::ReadFramebufferToMemory(VirtualFramebuffer *vfb, bool s
// FBO in a frame. This means that some games won't be able to avoid the on-some-GPUs
// performance-crushing framebuffer reloads from RAM, but we'll have to live with that.
if (nvfb->last_frame_used != gpuStats.numFlips) {
glstate.depthWrite.set(GL_TRUE);
glstate.colorMask.set(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
frame_clearing();
}
#endif
}
Expand Down Expand Up @@ -832,12 +820,7 @@ void FramebufferManager::BlitFramebuffer_(VirtualFramebuffer *src, VirtualFrameb
}

glstate.viewport.set(0, 0, dst->width, dst->height);
glstate.depthTest.disable();
glstate.blend.disable();
glstate.cullFace.disable();
glstate.depthTest.disable();
glstate.scissorTest.disable();
glstate.stencilTest.disable();
DisableState();

fbo_bind_color_as_texture(src->fbo, 0);

Expand Down Expand Up @@ -897,7 +880,7 @@ void FramebufferManager::PackFramebufferAsync_(VirtualFramebuffer *vfb) {
GLubyte *packed = 0;
bool unbind = false;
u8 nextPBO = (currentPBO_ + 1) % MAX_PBO;
bool useCPU = g_Config.iRenderingMode == FB_READFBOMEMORY_CPU ? 1 : 0 ;
bool useCPU = g_Config.iRenderingMode == FB_READFBOMEMORY_CPU;

// We'll prepare two PBOs to switch between readying and reading
if(!pixelBufObj_) {
Expand Down Expand Up @@ -1150,7 +1133,7 @@ void FramebufferManager::DeviceLost() {
void FramebufferManager::BeginFrame() {
DecimateFBOs();
currentRenderVfb_ = 0;
useBufferedRendering_ = g_Config.iRenderingMode != FB_NON_BUFFERED_MODE ? 1 : 0;
useBufferedRendering_ = g_Config.iRenderingMode != FB_NON_BUFFERED_MODE;
}

void FramebufferManager::SetDisplayFramebuffer(u32 framebuf, u32 stride, GEBufferFormat format) {
Expand Down
2 changes: 1 addition & 1 deletion GPU/GLES/StateMapping.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ void TransformDrawEngine::ApplyDrawState(int prim) {
float renderWidthFactor, renderHeightFactor;
float renderWidth, renderHeight;
float renderX, renderY;
bool useBufferedRendering = g_Config.iRenderingMode != 0 ? 1 : 0;
bool useBufferedRendering = g_Config.iRenderingMode != FB_NON_BUFFERED_MODE;
if (useBufferedRendering) {
renderX = 0.0f;
renderY = 0.0f;
Expand Down

0 comments on commit 169cc63

Please sign in to comment.