diff render_sdl.c @ 489:e97b80e3bd76 opengl

Support interlace mode with OpenGL backend
author Mike Pavone <pavone@retrodev.com>
date Sun, 27 Oct 2013 21:41:21 -0700
parents 32f053ad9b02
children c8e65962bfed
line wrap: on
line diff
--- a/render_sdl.c	Sun Oct 27 01:29:50 2013 -0700
+++ b/render_sdl.c	Sun Oct 27 21:41:21 2013 -0700
@@ -160,7 +160,7 @@
 			if (i < 2) {
 				glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 512, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, i ? context->evenbuf : context->oddbuf);
 			} else {
-				uint32_t blank = 255;
+				uint32_t blank = 255 << 24;
 				glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 1, 1, 0, GL_BGRA, GL_UNSIGNED_BYTE, &blank);
 			}
 		}
@@ -332,8 +332,7 @@
 	glUniform1i(un_textures[0], 0);
 
 	glActiveTexture(GL_TEXTURE1);
-	//TODO: Select appropriate texture based on status of interlace
-	glBindTexture(GL_TEXTURE_2D, textures[1]);
+	glBindTexture(GL_TEXTURE_2D, (context->regs[REG_MODE_4] & BIT_INTERLACE) ? textures[1] : textures[2]);
 	glUniform1i(un_textures[1], 1);
 
 	glBindBuffer(GL_ARRAY_BUFFER, buffers[0]);
@@ -346,7 +345,10 @@
 	glDisableVertexAttribArray(at_pos);
 
 	SDL_GL_SwapBuffers();
-
+	if (context->regs[REG_MODE_4] & BIT_INTERLACE)
+	{
+		context->framebuf = context->framebuf == context->oddbuf ? context->evenbuf : context->oddbuf;
+	}
 }
 
 uint32_t blankbuf[320*240];