summaryrefslogtreecommitdiff
path: root/Source/Plugins/Plugin_VideoSoftware
diff options
context:
space:
mode:
authorMatthew Parlane <parlane@gmail.com>2013-01-28 22:00:47 +1300
committerMatthew Parlane <parlane@gmail.com>2013-01-28 22:00:47 +1300
commit2dd077028fdaa296827864e70252b4e992b26c65 (patch)
tree6a65b5dc0c1566239f603bf1590a2eace73b46e6 /Source/Plugins/Plugin_VideoSoftware
parented9ef874e581aa2ff5c47ec58e7b741e160b026e (diff)
parenta8d4c78cec87e864cfa5410f14687d13308e38d7 (diff)
Merge branch 'master' into wii-network
Diffstat (limited to 'Source/Plugins/Plugin_VideoSoftware')
-rw-r--r--Source/Plugins/Plugin_VideoSoftware/Src/BPMemLoader.cpp4
-rw-r--r--Source/Plugins/Plugin_VideoSoftware/Src/SWRenderer.cpp42
-rw-r--r--Source/Plugins/Plugin_VideoSoftware/Src/SWVideoConfig.cpp2
-rw-r--r--Source/Plugins/Plugin_VideoSoftware/Src/SWmain.cpp64
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)