diff options
| author | Matthew Parlane <parlane@gmail.com> | 2013-01-28 22:00:47 +1300 |
|---|---|---|
| committer | Matthew Parlane <parlane@gmail.com> | 2013-01-28 22:00:47 +1300 |
| commit | 2dd077028fdaa296827864e70252b4e992b26c65 (patch) | |
| tree | 6a65b5dc0c1566239f603bf1590a2eace73b46e6 /Source/Plugins/Plugin_VideoSoftware | |
| parent | ed9ef874e581aa2ff5c47ec58e7b741e160b026e (diff) | |
| parent | a8d4c78cec87e864cfa5410f14687d13308e38d7 (diff) | |
Merge branch 'master' into wii-network
Diffstat (limited to 'Source/Plugins/Plugin_VideoSoftware')
4 files changed, 41 insertions, 71 deletions
diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp index 6a17a40eb1..f05f9f8b57 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp @@ -135,10 +135,10 @@ void SWBPWritten(int address, int newvalue) // AR and GB tiles are stored in separate TMEM banks => can't use a single memcpy for everything u32 tmem_addr_odd = tmem_cfg.preload_tmem_odd * TMEM_LINE_SIZE; - for (int i = 0; i < tmem_cfg.preload_tile_info.count; ++i) + for (unsigned int i = 0; i < tmem_cfg.preload_tile_info.count; ++i) { if (tmem_addr_even + TMEM_LINE_SIZE > TMEM_SIZE || - tmem_addr_even + TMEM_LINE_SIZE > TMEM_SIZE) + tmem_addr_odd + TMEM_LINE_SIZE > TMEM_SIZE) break; memcpy(texMem + tmem_addr_even, src_ptr, TMEM_LINE_SIZE); diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/SWRenderer.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/SWRenderer.cpp index 49739b7f6e..fb472cfdba 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/SWRenderer.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/SWRenderer.cpp @@ -52,10 +52,10 @@ void CreateShaders() { static const char *fragShaderText = "varying " PREC " vec2 TexCoordOut;\n" - "uniform " TEXTYPE " Texture;\n" + "uniform sampler2D Texture;\n" "void main() {\n" " " PREC " vec4 tmpcolor;\n" - " tmpcolor = " TEXFUNC "(Texture, TexCoordOut);\n" + " tmpcolor = texture2D(Texture, TexCoordOut);\n" " gl_FragColor = tmpcolor;\n" "}\n"; static const char *vertShaderText = @@ -63,7 +63,7 @@ void CreateShaders() "attribute vec2 TexCoordIn;\n " "varying vec2 TexCoordOut;\n " "void main() {\n" - " gl_Position = pos;\n" + " gl_Position = pos;\n" " TexCoordOut = TexCoordIn;\n" "}\n"; @@ -74,6 +74,8 @@ void CreateShaders() uni_tex = glGetUniformLocation(program, "Texture"); attr_pos = glGetAttribLocation(program, "pos"); attr_tex = glGetAttribLocation(program, "TexCoordIn"); + + } void SWRenderer::Prepare() @@ -86,7 +88,7 @@ void SWRenderer::Prepare() // TODO: Enable for GLES once RasterFont supports GLES #ifndef USE_GLES s_pfont = new RasterFont(); - glEnable(GL_TEXTURE_RECTANGLE_ARB); + glEnable(GL_TEXTURE_2D); #endif GL_REPORT_ERRORD(); } @@ -142,48 +144,37 @@ void SWRenderer::DrawTexture(u8 *texture, int width, int height) glViewport(0, 0, glWidth, glHeight); glScissor(0, 0, glWidth, glHeight); - glBindTexture(TEX2D, s_RenderTarget); + glBindTexture(GL_TEXTURE_2D, s_RenderTarget); - glTexImage2D(TEX2D, 0, GL_RGBA, (GLsizei)width, (GLsizei)height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture); - glTexParameteri(TEX2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(TEX2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)width, (GLsizei)height, 0, GL_RGBA, GL_UNSIGNED_BYTE, texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glUseProgram(program); static const GLfloat verts[4][2] = { { -1, -1}, // Left top { -1, 1}, // left bottom { 1, 1}, // right bottom { 1, -1} // right top }; - //Texture rectangle uses pixel coordinates -#ifndef USE_GLES - GLfloat u_max = (GLfloat)width; - GLfloat v_max = (GLfloat)height; - - static const GLfloat texverts[4][2] = { - {0, v_max}, - {0, 0}, - {u_max, 0}, - {u_max, v_max} - }; -#else static const GLfloat texverts[4][2] = { {0, 1}, {0, 0}, {1, 0}, {1, 1} }; -#endif + glVertexAttribPointer(attr_pos, 2, GL_FLOAT, GL_FALSE, 0, verts); glVertexAttribPointer(attr_tex, 2, GL_FLOAT, GL_FALSE, 0, texverts); glEnableVertexAttribArray(attr_pos); glEnableVertexAttribArray(attr_tex); - glActiveTexture(GL_TEXTURE0); glUniform1i(uni_tex, 0); + glActiveTexture(GL_TEXTURE0); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableVertexAttribArray(attr_pos); glDisableVertexAttribArray(attr_tex); - glBindTexture(TEX2D, 0); + glBindTexture(GL_TEXTURE_2D, 0); GL_REPORT_ERRORD(); } @@ -195,11 +186,8 @@ void SWRenderer::SwapBuffer() GLInterface->Swap(); - swstats.ResetFrame(); + swstats.ResetFrame(); -#ifndef USE_GLES - glClearDepth(1.0f); -#endif glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); GL_REPORT_ERRORD(); diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/SWVideoConfig.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/SWVideoConfig.cpp index 7f7ef6b0f8..05a6cdddf2 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/SWVideoConfig.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/SWVideoConfig.cpp @@ -51,7 +51,7 @@ void SWVideoConfig::Load(const char* ini_file) iniFile.Get("Hardware", "Fullscreen", &bFullscreen, 0); // Hardware iniFile.Get("Hardware", "RenderToMainframe", &renderToMainframe, false); - iniFile.Get("Rendering", "HwRasterizer", &bHwRasterizer, true); + iniFile.Get("Rendering", "HwRasterizer", &bHwRasterizer, false); iniFile.Get("Info", "ShowStats", &bShowStats, false); diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp index ae2a4db3f5..332e83d0e8 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp @@ -70,7 +70,7 @@ void VideoSoftware::ShowConfig(void *_hParent) bool VideoSoftware::Initialize(void *&window_handle) { - g_SWVideoConfig.Load((File::GetUserPath(D_CONFIG_IDX) + "gfx_software.ini").c_str()); + g_SWVideoConfig.Load((File::GetUserPath(D_CONFIG_IDX) + "gfx_software.ini").c_str()); InitInterface(); if (!GLInterface->Create(window_handle)) @@ -79,18 +79,16 @@ bool VideoSoftware::Initialize(void *&window_handle) return false; } - InitBPMemory(); - InitXFMemory(); - SWCommandProcessor::Init(); - SWPixelEngine::Init(); - OpcodeDecoder::Init(); - Clipper::Init(); - Rasterizer::Init(); - if (g_SWVideoConfig.bHwRasterizer) - HwRasterizer::Init(); - else - SWRenderer::Init(); - DebugUtil::Init(); + InitBPMemory(); + InitXFMemory(); + SWCommandProcessor::Init(); + SWPixelEngine::Init(); + OpcodeDecoder::Init(); + Clipper::Init(); + Rasterizer::Init(); + HwRasterizer::Init(); + SWRenderer::Init(); + DebugUtil::Init(); return true; } @@ -134,10 +132,8 @@ void VideoSoftware::EmuStateChange(EMUSTATE_CHANGE newState) void VideoSoftware::Shutdown() { - if (g_SWVideoConfig.bHwRasterizer) - HwRasterizer::Shutdown(); - else - SWRenderer::Shutdown(); + HwRasterizer::Shutdown(); + SWRenderer::Shutdown(); GLInterface->Shutdown(); } @@ -145,35 +141,21 @@ void VideoSoftware::Shutdown() void VideoSoftware::Video_Prepare() { GLInterface->MakeCurrent(); - // Init extension support. - { + // Init extension support. + // Required for WGL SwapInterval #ifndef USE_GLES if (glewInit() != GLEW_OK) { - ERROR_LOG(VIDEO, "glewInit() failed!Does your video card support OpenGL 2.x?"); - return; - } - - // Handle VSync on/off -#ifdef _WIN32 - if (WGLEW_EXT_swap_control) - wglSwapIntervalEXT(VSYNC_ENABLED); - else - ERROR_LOG(VIDEO, "no support for SwapInterval (framerate clamped to monitor refresh rate)Does your video card support OpenGL 2.x?"); -#elif defined(HAVE_X11) && HAVE_X11 - if (glXSwapIntervalSGI) - glXSwapIntervalSGI(VSYNC_ENABLED); - else - ERROR_LOG(VIDEO, "no support for SwapInterval (framerate clamped to monitor refresh rate)"); -#endif -#endif + ERROR_LOG(VIDEO, "glewInit() failed!Does your video card support OpenGL 2.x?"); + return; } +#endif + // Handle VSync on/off + GLInterface->SwapInterval(VSYNC_ENABLED); - if (g_SWVideoConfig.bHwRasterizer) - HwRasterizer::Prepare(); - else - SWRenderer::Prepare(); + HwRasterizer::Prepare(); + SWRenderer::Prepare(); - INFO_LOG(VIDEO, "Video backend initialized."); + INFO_LOG(VIDEO, "Video backend initialized."); } // Run from the CPU thread (from VideoInterface.cpp) |
