diff --git a/Source/Core/VideoCommon/Src/NativeVertexFormat.h b/Source/Core/VideoCommon/Src/NativeVertexFormat.h index bad74a8b63..96bd65ea57 100644 --- a/Source/Core/VideoCommon/Src/NativeVertexFormat.h +++ b/Source/Core/VideoCommon/Src/NativeVertexFormat.h @@ -97,6 +97,7 @@ public: virtual void Initialize(const PortableVertexDeclaration &vtx_decl) = 0; virtual void SetupVertexPointers() const = 0; + virtual void EnableComponents(u32 components) {} static NativeVertexFormat *Create(); diff --git a/Source/Core/VideoCommon/Src/NativeVertexWriter.h b/Source/Core/VideoCommon/Src/NativeVertexWriter.h index f4680d42d2..6af9105ee9 100644 --- a/Source/Core/VideoCommon/Src/NativeVertexWriter.h +++ b/Source/Core/VideoCommon/Src/NativeVertexWriter.h @@ -25,9 +25,8 @@ namespace VertexManager void AddVertices(int primitive, int numvertices); void Flush(); // flushes the current buffer -// These two don't really belong here and are not relevant for D3D - TODO, find better place to put them. +// This doesn't really belong here and are not relevant for D3D - TODO, find better place to put them. int GetRemainingSize(); // remaining space in the current buffer. -void EnableComponents(u32 components); // very implementation specific - D3D9 won't need this one. // TODO: move, rename. extern u8* s_pCurBufferPointer; diff --git a/Source/Core/VideoCommon/Src/VertexLoader.cpp b/Source/Core/VideoCommon/Src/VertexLoader.cpp index 220be31816..8c8e7c254f 100644 --- a/Source/Core/VideoCommon/Src/VertexLoader.cpp +++ b/Source/Core/VideoCommon/Src/VertexLoader.cpp @@ -507,7 +507,7 @@ void VertexLoader::RunVertices(int vtx_attr_group, int primitive, int count) return; } - VertexManager::EnableComponents(m_NativeFmt->m_components); + m_NativeFmt->EnableComponents(m_NativeFmt->m_components); // Load position and texcoord scale factors. m_VtxAttr.PosFrac = g_VtxAttr[vtx_attr_group].g0.PosFrac; diff --git a/Source/Plugins/Plugin_VideoDX9/Plugin_VideoDX9.vcproj b/Source/Plugins/Plugin_VideoDX9/Plugin_VideoDX9.vcproj index 0366e740cc..8f8c5c0be0 100644 --- a/Source/Plugins/Plugin_VideoDX9/Plugin_VideoDX9.vcproj +++ b/Source/Plugins/Plugin_VideoDX9/Plugin_VideoDX9.vcproj @@ -1237,6 +1237,10 @@ RelativePath=".\Src\VertexLoader_TextCoord.h" > + + diff --git a/Source/Plugins/Plugin_VideoDX9/Src/BPStructs.h b/Source/Plugins/Plugin_VideoDX9/Src/BPStructs.h index 9f6e97dc85..eda0f1954c 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/BPStructs.h +++ b/Source/Plugins/Plugin_VideoDX9/Src/BPStructs.h @@ -18,8 +18,6 @@ #ifndef _BPSTRUCTS_H #define _BPSTRUCTS_H -#pragma pack(4) - #include "BPMemory.h" void BPInit(); diff --git a/Source/Plugins/Plugin_VideoDX9/Src/Config.cpp b/Source/Plugins/Plugin_VideoDX9/Src/Config.cpp index 6981be2eb1..5d2629a2c3 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/Config.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/Config.cpp @@ -39,7 +39,6 @@ void Config::Load() iniFile.Get("Settings", "OverlayStats", &bOverlayStats, false); iniFile.Get("Settings", "Postprocess", &iPostprocessEffect, 0); - iniFile.Get("Settings", "DLOptimize", &iCompileDLsLevel, 0); iniFile.Get("Settings", "DumpTextures", &bDumpTextures, 0); iniFile.Get("Settings", "ShowShaderErrors", &bShowShaderErrors, 0); iniFile.Get("Settings", "Multisample", &iMultisampleMode, 0); @@ -67,7 +66,6 @@ void Config::Save() iniFile.Set("Settings", "OverlayStats", bOverlayStats); iniFile.Set("Settings", "OverlayStats", bOverlayStats); iniFile.Set("Settings", "Postprocess", iPostprocessEffect); - iniFile.Set("Settings", "DLOptimize", iCompileDLsLevel); iniFile.Set("Settings", "DumpTextures", bDumpTextures); iniFile.Set("Settings", "ShowShaderErrors", bShowShaderErrors); iniFile.Set("Settings", "Multisample", iMultisampleMode); diff --git a/Source/Plugins/Plugin_VideoDX9/Src/Config.h b/Source/Plugins/Plugin_VideoDX9/Src/Config.h index 23e5b82f04..6f86b3f346 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/Config.h +++ b/Source/Plugins/Plugin_VideoDX9/Src/Config.h @@ -31,7 +31,6 @@ struct Config int iMultisampleMode; int iPostprocessEffect; - int iCompileDLsLevel; bool renderToMainframe; bool bFullscreen; diff --git a/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.cpp b/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.cpp index 713e6ccde4..5edf9a5ec7 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/D3DBase.cpp @@ -21,10 +21,11 @@ namespace D3D { - bool fullScreen = false, nextFullScreen=false; - LPDIRECT3D9 D3D = NULL; // Used to create the D3DDevice - LPDIRECT3DDEVICE9 dev = NULL; // Our rendering device - LPDIRECT3DSURFACE9 backBuffer; + bool fullScreen = false; + bool nextFullScreen = false; + LPDIRECT3D9 D3D = NULL; // Used to create the D3DDevice + LPDIRECT3DDEVICE9 dev = NULL; // Our rendering device + LPDIRECT3DSURFACE9 backBuffer; D3DCAPS9 caps; int multisample; int resolution; @@ -163,7 +164,7 @@ namespace D3D { if (qlevels > 2) { - // 8x, 8xQ are available + // 16x, 16xQ are available // See http://developer.nvidia.com/object/coverage-sampled-aa.html a.aa_levels.push_back(AALevel("16x CSAA", D3DMULTISAMPLE_4_SAMPLES, 4)); a.aa_levels.push_back(AALevel("16xQ CSAA", D3DMULTISAMPLE_8_SAMPLES, 2)); @@ -337,10 +338,12 @@ namespace D3D { return xres; } + int GetDisplayHeight() { return yres; } + void SwitchFullscreen(bool fullscreen) { nextFullScreen = fullscreen; @@ -386,4 +389,4 @@ namespace D3D } } -} +} // namespace diff --git a/Source/Plugins/Plugin_VideoDX9/Src/D3DShader.cpp b/Source/Plugins/Plugin_VideoDX9/Src/D3DShader.cpp index 25efbfd8da..bfc68f2150 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/D3DShader.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/D3DShader.cpp @@ -21,88 +21,89 @@ #include "Config.h" #include "D3DShader.h" - namespace D3D { - LPDIRECT3DVERTEXSHADER9 CompileVShader(const char *code, int len) + +LPDIRECT3DVERTEXSHADER9 CompileVShader(const char *code, int len) +{ + //try to compile + LPD3DXBUFFER shaderBuffer = 0; + LPD3DXBUFFER errorBuffer = 0; + LPDIRECT3DVERTEXSHADER9 vShader = 0; + HRESULT hr = D3DXCompileShader(code, len, 0, 0, "main", "vs_1_1", 0, &shaderBuffer, &errorBuffer, 0); + if (FAILED(hr)) { - //try to compile - LPD3DXBUFFER shaderBuffer = 0, errorBuffer = 0; - LPDIRECT3DVERTEXSHADER9 vShader = 0; - HRESULT hr = D3DXCompileShader(code,len,0,0,"main","vs_1_1",0,&shaderBuffer,&errorBuffer,0); - if (FAILED(hr)) - { - //let's try 2.0 - hr = D3DXCompileShader(code,len,0,0,"main","vs_2_0",0,&shaderBuffer,&errorBuffer,0); - } - - if (FAILED(hr)) - { - //compilation error - std::string hello = (char*)errorBuffer->GetBufferPointer(); - hello += "\n\n"; - hello += code; - if (g_Config.bShowShaderErrors) - MessageBox(0, hello.c_str(), "Error compiling vertex shader", MB_ICONERROR); - vShader = 0; - } - else if (SUCCEEDED(hr)) - { - //create it - HRESULT hr = E_FAIL; - if (shaderBuffer) - hr = D3D::dev->CreateVertexShader((DWORD *)shaderBuffer->GetBufferPointer(), &vShader); - if (FAILED(hr) || vShader == 0) - { - if (g_Config.bShowShaderErrors) - MessageBox(0,code,(char*)errorBuffer->GetBufferPointer(),MB_ICONERROR); - } - } - - //cleanup - if (shaderBuffer) - shaderBuffer->Release(); - if (errorBuffer) - errorBuffer->Release(); - - return vShader; + //let's try 2.0 + hr = D3DXCompileShader(code, len, 0, 0, "main", "vs_2_0", 0, &shaderBuffer, &errorBuffer, 0); } - LPDIRECT3DPIXELSHADER9 CompilePShader(const char *code, int len) + if (FAILED(hr)) { - LPD3DXBUFFER shaderBuffer = 0, errorBuffer = 0; - LPDIRECT3DPIXELSHADER9 pShader = 0; - static char *versions[6] = {"ERROR","ps_1_1","ps_1_4","ps_2_0","ps_3_0","ps_4_0"}; - HRESULT hr = D3DXCompileShader(code,len,0,0, - "main","ps_2_0", // Pixel Shader 2.0 is enough for all we do - 0,&shaderBuffer,&errorBuffer,0); - - if (FAILED(hr)) - { - std::string hello = (char*)errorBuffer->GetBufferPointer(); - hello += "\n\n"; - hello += code; - if (g_Config.bShowShaderErrors) - MessageBox(0, hello.c_str(), "Error compiling pixel shader", MB_ICONERROR); - pShader = 0; - } - else - { - //create it - HRESULT hr = D3D::dev->CreatePixelShader((DWORD *)shaderBuffer->GetBufferPointer(), &pShader); - if (FAILED(hr) || pShader == 0) - { - if (g_Config.bShowShaderErrors) - MessageBox(0,"damn","error creating pixelshader",MB_ICONERROR); - } - } - - //cleanup - if (shaderBuffer) - shaderBuffer->Release(); - if (errorBuffer) - errorBuffer->Release(); - - return pShader; + //compilation error + std::string hello = (char*)errorBuffer->GetBufferPointer(); + hello += "\n\n"; + hello += code; + if (g_Config.bShowShaderErrors) + MessageBox(0, hello.c_str(), "Error compiling vertex shader", MB_ICONERROR); + vShader = 0; } + else if (SUCCEEDED(hr)) + { + //create it + HRESULT hr = E_FAIL; + if (shaderBuffer) + hr = D3D::dev->CreateVertexShader((DWORD *)shaderBuffer->GetBufferPointer(), &vShader); + if (FAILED(hr) || vShader == 0) + { + if (g_Config.bShowShaderErrors) + MessageBox(0,code,(char*)errorBuffer->GetBufferPointer(),MB_ICONERROR); + } + } + + //cleanup + if (shaderBuffer) + shaderBuffer->Release(); + if (errorBuffer) + errorBuffer->Release(); + + return vShader; +} + +LPDIRECT3DPIXELSHADER9 CompilePShader(const char *code, int len) +{ + LPD3DXBUFFER shaderBuffer = 0; + LPD3DXBUFFER errorBuffer = 0; + LPDIRECT3DPIXELSHADER9 pShader = 0; + static char *versions[6] = {"ERROR", "ps_1_1", "ps_1_4", "ps_2_0", "ps_3_0", "ps_4_0"}; + HRESULT hr = D3DXCompileShader(code, len, 0, 0, "main", "ps_2_0", // Pixel Shader 2.0 is enough for all we do + 0, &shaderBuffer, &errorBuffer, 0); + + if (FAILED(hr)) + { + std::string hello = (char*)errorBuffer->GetBufferPointer(); + hello += "\n\n"; + hello += code; + if (g_Config.bShowShaderErrors) + MessageBox(0, hello.c_str(), "Error compiling pixel shader", MB_ICONERROR); + pShader = 0; + } + else + { + //create it + HRESULT hr = D3D::dev->CreatePixelShader((DWORD *)shaderBuffer->GetBufferPointer(), &pShader); + if (FAILED(hr) || pShader == 0) + { + if (g_Config.bShowShaderErrors) + MessageBox(0,"damn","error creating pixelshader",MB_ICONERROR); + } + } + + //cleanup + if (shaderBuffer) + shaderBuffer->Release(); + if (errorBuffer) + errorBuffer->Release(); + + return pShader; +} } diff --git a/Source/Plugins/Plugin_VideoDX9/Src/D3DTexture.cpp b/Source/Plugins/Plugin_VideoDX9/Src/D3DTexture.cpp index d78cde6b35..cfb592fcb9 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/D3DTexture.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/D3DTexture.cpp @@ -20,96 +20,97 @@ namespace D3D { - LPDIRECT3DTEXTURE9 CreateTexture2D(const u8* buffer, const int width, const int height,const int pitch, D3DFORMAT fmt) + +LPDIRECT3DTEXTURE9 CreateTexture2D(const u8* buffer, const int width, const int height,const int pitch, D3DFORMAT fmt) +{ + u32* pBuffer = (u32*)buffer; + LPDIRECT3DTEXTURE9 pTexture; + + // crazy bitmagic, sorry :) + bool isPow2 = !((width&(width-1)) || (height&(height-1))); + + HRESULT hr; + // TODO(ector): allow mipmaps for non-pow textures on newer cards? + if (!isPow2) + hr = dev->CreateTexture(width, height, 1, 0, fmt, D3DPOOL_MANAGED, &pTexture, NULL); + else + hr = dev->CreateTexture(width, height, 0, D3DUSAGE_AUTOGENMIPMAP, fmt, D3DPOOL_MANAGED, &pTexture, NULL); + + if(FAILED(hr)) + return 0; + + int level = 0; + + D3DLOCKED_RECT Lock; + pTexture->LockRect(level, &Lock, NULL, 0 ); + + u32* pIn = pBuffer; + switch(fmt) { - u32* pBuffer = (u32*)buffer; - LPDIRECT3DTEXTURE9 pTexture; - - // crazy bitmagic - bool isPow2 = !((width&(width-1)) || (height&(height-1))); - - HRESULT hr; - // TODO(ector): allow mipmaps for non-pow textures on newer cards? - if (!isPow2) - hr = dev->CreateTexture(width, height, 1, 0, fmt, D3DPOOL_MANAGED, &pTexture, NULL); - else - hr = dev->CreateTexture(width, height, 0, D3DUSAGE_AUTOGENMIPMAP, fmt, D3DPOOL_MANAGED, &pTexture, NULL); - - if(FAILED(hr)) - return 0; - - int level = 0; - - D3DLOCKED_RECT Lock; - pTexture->LockRect(level, &Lock, NULL, 0 ); - - u32* pIn = pBuffer; - switch(fmt) + case D3DFMT_A8R8G8B8: { - case D3DFMT_A8R8G8B8: + for (int y = 0; y < height; y++) { - for (int y = 0; y < height; y++) - { - u32* pBits = (u32*)((u8*)Lock.pBits + (y * Lock.Pitch)); - memcpy(pBits, pIn, width * 4); - pIn += pitch; - } + u32* pBits = (u32*)((u8*)Lock.pBits + (y * Lock.Pitch)); + memcpy(pBits, pIn, width * 4); + pIn += pitch; } - break; - case D3DFMT_DXT1: - memcpy(Lock.pBits,buffer,(width/4)*(height/4)*8); - break; } - pTexture->UnlockRect(level); - return pTexture; - } - - void ReplaceTexture2D(LPDIRECT3DTEXTURE9 pTexture, const u8* buffer, const int width, const int height,const int pitch, D3DFORMAT fmt) - { - u32* pBuffer = (u32*)buffer; - int level = 0; - D3DLOCKED_RECT Lock; - pTexture->LockRect(level, &Lock, NULL, 0 ); - u32* pIn = pBuffer; - switch(fmt) - { - case D3DFMT_A8R8G8B8: - { - for (int y = 0; y < height; y++) - { - u32* pBits = (u32*)((u8*)Lock.pBits + (y * Lock.Pitch)); - memcpy(pBits,pIn, width*4); - pIn += pitch; - } - } - break; - case D3DFMT_DXT1: - memcpy(Lock.pBits,buffer,(width/4)*(height/4)*8); - break; - } - pTexture->UnlockRect(level); - } - - LPDIRECT3DTEXTURE9 CreateRenderTarget(const int width, const int height) - { - LPDIRECT3DTEXTURE9 tex; - HRESULT hr = dev->CreateTexture(width,height,0,D3DUSAGE_RENDERTARGET | D3DUSAGE_AUTOGENMIPMAP,D3DFMT_A8R8G8B8,D3DPOOL_DEFAULT,&tex,NULL); - - if (FAILED(hr)) - return 0; - else - return tex; - } - - LPDIRECT3DSURFACE9 CreateDepthStencilSurface(const int width, const int height) - { - LPDIRECT3DSURFACE9 surf; - HRESULT hr = dev->CreateDepthStencilSurface(width,height,D3DFMT_D24S8,D3DMULTISAMPLE_NONE,0,0,&surf,0); - - if (FAILED(hr)) - return 0; - else - return surf; - + break; + case D3DFMT_DXT1: + memcpy(Lock.pBits,buffer,(width/4)*(height/4)*8); + break; } + pTexture->UnlockRect(level); + return pTexture; } + +void ReplaceTexture2D(LPDIRECT3DTEXTURE9 pTexture, const u8* buffer, const int width, const int height,const int pitch, D3DFORMAT fmt) +{ + u32* pBuffer = (u32*)buffer; + int level = 0; + D3DLOCKED_RECT Lock; + pTexture->LockRect(level, &Lock, NULL, 0 ); + u32* pIn = pBuffer; + switch(fmt) + { + case D3DFMT_A8R8G8B8: + { + for (int y = 0; y < height; y++) + { + u32* pBits = (u32*)((u8*)Lock.pBits + (y * Lock.Pitch)); + memcpy(pBits, pIn, width * 4); + pIn += pitch; + } + } + break; + case D3DFMT_DXT1: + memcpy(Lock.pBits,buffer,(width/4)*(height/4)*8); + break; + } + pTexture->UnlockRect(level); +} + +LPDIRECT3DTEXTURE9 CreateRenderTarget(const int width, const int height) +{ + LPDIRECT3DTEXTURE9 tex; + HRESULT hr = dev->CreateTexture(width,height,0,D3DUSAGE_RENDERTARGET | D3DUSAGE_AUTOGENMIPMAP,D3DFMT_A8R8G8B8,D3DPOOL_DEFAULT,&tex,NULL); + + if (FAILED(hr)) + return 0; + else + return tex; +} + +LPDIRECT3DSURFACE9 CreateDepthStencilSurface(const int width, const int height) +{ + LPDIRECT3DSURFACE9 surf; + HRESULT hr = dev->CreateDepthStencilSurface(width,height,D3DFMT_D24S8,D3DMULTISAMPLE_NONE,0,0,&surf,0); + + if (FAILED(hr)) + return 0; + else + return surf; +} + +} // namespace diff --git a/Source/Plugins/Plugin_VideoDX9/Src/D3DUtil.cpp b/Source/Plugins/Plugin_VideoDX9/Src/D3DUtil.cpp index 1c80eaae42..b19ab5e94e 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/D3DUtil.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/D3DUtil.cpp @@ -36,7 +36,7 @@ namespace D3D #define D3DFVF_FONT2DVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX1) #define D3DFVF_FONT3DVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_NORMAL|D3DFVF_TEX1) - inline FONT2DVERTEX InitFont2DVertex( float x, float y, u32 color, float tu, float tv ) + inline FONT2DVERTEX InitFont2DVertex(float x, float y, u32 color, float tu, float tv) { FONT2DVERTEX v; v.x=x; v.y=y; v.z=0; v.rhw=1.0f; v.color = color; v.tu = tu; v.tv = tv; return v; @@ -51,17 +51,16 @@ namespace D3D int CD3DFont::Init() { - int hr; m_fTextScale = 1.0f; // Draw fonts into texture without scaling // Create a new texture for the font - hr = dev->CreateTexture( m_dwTexWidth, m_dwTexHeight, 1, 0, D3DFMT_A4R4G4B4, D3DPOOL_MANAGED, &m_pTexture, NULL ); - if( FAILED(hr) ) + HRESULT hr = dev->CreateTexture(m_dwTexWidth, m_dwTexHeight, 1, 0, D3DFMT_A4R4G4B4, D3DPOOL_MANAGED, &m_pTexture, NULL); + if (FAILED(hr)) return hr; // Prepare to create a bitmap int *pBitmapBits; BITMAPINFO bmi; - ZeroMemory( &bmi.bmiHeader, sizeof(BITMAPINFOHEADER) ); + ZeroMemory(&bmi.bmiHeader, sizeof(BITMAPINFOHEADER)); bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = (int)m_dwTexWidth; bmi.bmiHeader.biHeight = -(int)m_dwTexHeight; @@ -70,33 +69,32 @@ namespace D3D bmi.bmiHeader.biBitCount = 32; // Create a DC and a bitmap for the font - HDC hDC = CreateCompatibleDC( NULL ); - HBITMAP hbmBitmap = CreateDIBSection( hDC, &bmi, DIB_RGB_COLORS, - (VOID**)&pBitmapBits, NULL, 0 ); - SetMapMode( hDC, MM_TEXT ); + HDC hDC = CreateCompatibleDC(NULL); + HBITMAP hbmBitmap = CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, (VOID**)&pBitmapBits, NULL, 0); + SetMapMode(hDC, MM_TEXT); // Create a font. By specifying ANTIALIASED_QUALITY, we might get an // antialiased font, but this is not guaranteed. // We definitely don't want to get it cleartype'd, anyway. int m_dwFontHeight = 36; - int nHeight = -MulDiv( m_dwFontHeight, int(GetDeviceCaps(hDC, LOGPIXELSY) * m_fTextScale), 72 ); + int nHeight = -MulDiv(m_dwFontHeight, int(GetDeviceCaps(hDC, LOGPIXELSY) * m_fTextScale), 72); int dwBold = FW_NORMAL; ///FW_BOLD - HFONT hFont = CreateFont( nHeight, 0, 0, 0, dwBold, 0, + HFONT hFont = CreateFont(nHeight, 0, 0, 0, dwBold, 0, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, - VARIABLE_PITCH, "Tahoma"); + VARIABLE_PITCH, "Courier New"); if (NULL == hFont) return E_FAIL; - HGDIOBJ hOldbmBitmap = SelectObject( hDC, hbmBitmap ); - HGDIOBJ hOldFont = SelectObject( hDC, hFont ); + HGDIOBJ hOldbmBitmap = SelectObject(hDC, hbmBitmap); + HGDIOBJ hOldFont = SelectObject(hDC, hFont); // Set text properties - SetTextColor( hDC, 0xFFFFFF ); - SetBkColor ( hDC, 0 ); - SetTextAlign( hDC, TA_TOP ); + SetTextColor(hDC, 0xFFFFFF); + SetBkColor (hDC, 0); + SetTextAlign(hDC, TA_TOP); // Loop through all printable character and output them to the bitmap.. // Meanwhile, keep track of the corresponding tex coords for each character. @@ -105,18 +103,18 @@ namespace D3D char str[2] = "\0"; SIZE size; - for( char c=0; c<127-32; c++ ) + for (char c=0; c<127-32; c++) { str[0] = c+32; - GetTextExtentPoint32( hDC, str, 1, &size ); + GetTextExtentPoint32(hDC, str, 1, &size); - if( (int)(x+size.cx+1) > m_dwTexWidth ) + if ((int)(x+size.cx+1) > m_dwTexWidth) { x = 0; y += size.cy+1; } - ExtTextOut( hDC, x+1, y+0, ETO_OPAQUE | ETO_CLIPPED, NULL, str, 1, NULL ); + ExtTextOut(hDC, x+1, y+0, ETO_OPAQUE | ETO_CLIPPED, NULL, str, 1, NULL); m_fTexCoords[c][0] = ((float)(x+0))/m_dwTexWidth; m_fTexCoords[c][1] = ((float)(y+0))/m_dwTexHeight; @@ -128,13 +126,13 @@ namespace D3D // Lock the surface and write the alpha values for the set pixels D3DLOCKED_RECT d3dlr; - m_pTexture->LockRect( 0, &d3dlr, 0, 0 ); + m_pTexture->LockRect(0, &d3dlr, 0, 0); unsigned short* pDst16 = (unsigned short*)d3dlr.pBits; int bAlpha; // 4-bit measure of pixel intensity - for( y=0; y < m_dwTexHeight; y++ ) + for (y=0; y < m_dwTexHeight; y++) { - for( x=0; x < m_dwTexWidth; x++ ) + for (x=0; x < m_dwTexWidth; x++) { bAlpha = ((pBitmapBits[m_dwTexWidth*y + x] & 0xff) >> 4); *pDst16++ = (bAlpha << 12) | 0x0fff; @@ -144,16 +142,16 @@ namespace D3D // Done updating texture, so clean up used objects m_pTexture->UnlockRect(0); - SelectObject( hDC, hOldbmBitmap ); - DeleteObject( hbmBitmap ); + SelectObject(hDC, hOldbmBitmap); + DeleteObject(hbmBitmap); - SelectObject( hDC, hOldFont ); - DeleteObject( hFont ); + SelectObject(hDC, hOldFont); + DeleteObject(hFont); // Create vertex buffer for the letters - if( FAILED( hr = dev->CreateVertexBuffer( MAX_NUM_VERTICES*sizeof(FONT2DVERTEX), + if (FAILED(hr = dev->CreateVertexBuffer(MAX_NUM_VERTICES*sizeof(FONT2DVERTEX), D3DUSAGE_WRITEONLY | D3DUSAGE_DYNAMIC, 0, - D3DPOOL_DEFAULT, &m_pVB,NULL ) ) ) + D3DPOOL_DEFAULT, &m_pVB,NULL))) { return hr; } @@ -163,8 +161,8 @@ namespace D3D int CD3DFont::Shutdown() { - SAFE_RELEASE( m_pVB ); - SAFE_RELEASE( m_pTexture ); + SAFE_RELEASE(m_pVB); + SAFE_RELEASE(m_pTexture); return S_OK; } @@ -213,7 +211,7 @@ namespace D3D void CD3DFont::SetRenderStates() { // dev->SetTexture(0, m_pTexture); - Renderer::SetTexture( 0, m_pTexture ); + Renderer::SetTexture(0, m_pTexture); dev->SetPixelShader(0); dev->SetVertexShader(0); @@ -226,15 +224,15 @@ namespace D3D // dev->SetRenderState((_D3DRENDERSTATETYPE)RS[i][0],RS[i][1]); // dev->SetTextureStageState(0, (_D3DTEXTURESTAGESTATETYPE)int(TS[i][0]), TS[i][1]); - Renderer::SetRenderState( (_D3DRENDERSTATETYPE)RS[i][0], RS[i][1] ); - Renderer::SetTextureStageState( 0, (_D3DTEXTURESTAGESTATETYPE)int(TS[i][0]), TS[i][1] ); + Renderer::SetRenderState((_D3DRENDERSTATETYPE)RS[i][0], RS[i][1]); + Renderer::SetTextureStageState(0, (_D3DTEXTURESTAGESTATETYPE)int(TS[i][0]), TS[i][1]); } } void RestoreRenderStates() { // dev->SetTexture(0, texture_old); - Renderer::SetTexture( 0, texture_old ); + Renderer::SetTexture(0, texture_old); dev->SetPixelShader(ps_old); dev->SetVertexShader(vs_old); @@ -248,16 +246,16 @@ namespace D3D // dev->SetRenderState((_D3DRENDERSTATETYPE)RS[i][0], RS_old[i]); // dev->SetTextureStageState(0, (_D3DTEXTURESTAGESTATETYPE)int(TS[i][0]), TS_old[i]); - Renderer::SetRenderState( (_D3DRENDERSTATETYPE)RS[i][0], RS_old[i] ); - Renderer::SetTextureStageState( 0, (_D3DTEXTURESTAGESTATETYPE)int(TS[i][0]), TS_old[i] ); + Renderer::SetRenderState((_D3DRENDERSTATETYPE)RS[i][0], RS_old[i]); + Renderer::SetTextureStageState(0, (_D3DTEXTURESTAGESTATETYPE)int(TS[i][0]), TS_old[i]); } } - int CD3DFont::DrawTextScaled( float x, float y, float fXScale, float fYScale, float spacing, u32 dwColor, const char* strText, bool center ) + int CD3DFont::DrawTextScaled(float x, float y, float fXScale, float fYScale, float spacing, u32 dwColor, const char* strText, bool center) { SaveRenderStates(); SetRenderStates(); - dev->SetStreamSource( 0, m_pVB, 0, sizeof(FONT2DVERTEX) ); + dev->SetStreamSource(0, m_pVB, 0, sizeof(FONT2DVERTEX)); float vpWidth = 1; float vpHeight = 1; @@ -267,11 +265,11 @@ namespace D3D float fStartX = sx; - float invLineHeight = 1.0f / (( m_fTexCoords[0][3] - m_fTexCoords[0][1] ) * m_dwTexHeight); + float invLineHeight = 1.0f / ((m_fTexCoords[0][3] - m_fTexCoords[0][1]) * m_dwTexHeight); // Fill vertex buffer FONT2DVERTEX* pVertices; int dwNumTriangles = 0L; - m_pVB->Lock( 0, 0, (void**)&pVertices, D3DLOCK_DISCARD ); + m_pVB->Lock(0, 0, (void**)&pVertices, D3DLOCK_DISCARD); const char *oldstrText=strText; //First, let's measure the text @@ -279,13 +277,13 @@ namespace D3D float mx=0; float maxx=0; - while( *strText ) + while(*strText) { char c = *strText++; - if( c == ('\n') ) + if (c == ('\n')) mx=0; - if( c < (' ') ) + if (c < (' ')) continue; float tx1 = m_fTexCoords[c-32][0]; @@ -309,16 +307,16 @@ namespace D3D float wScale=(fXScale*vpHeight)*invLineHeight; float hScale=(fYScale*vpHeight)*invLineHeight; - while( *strText ) + while(*strText) { char c = *strText++; - if( c == ('\n') ) + if (c == ('\n')) { sx = fStartX; sy += fYScale*vpHeight; } - if( c < (' ') ) + if (c < (' ')) continue; c-=32; @@ -347,15 +345,15 @@ namespace D3D pVertices+=6; dwNumTriangles += 2; - if( dwNumTriangles * 3 > (MAX_NUM_VERTICES-6) ) + if (dwNumTriangles * 3 > (MAX_NUM_VERTICES-6)) { // Unlock, render, and relock the vertex buffer m_pVB->Unlock(); - // dev->DrawPrimitive( D3DPT_TRIANGLELIST, 0, dwNumTriangles ); - Renderer::DrawPrimitive( D3DPT_TRIANGLELIST, 0, dwNumTriangles ); + // dev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, dwNumTriangles); + dev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, dwNumTriangles); - m_pVB->Lock( 0, 0, (void**)&pVertices, D3DLOCK_DISCARD ); + m_pVB->Lock(0, 0, (void**)&pVertices, D3DLOCK_DISCARD); dwNumTriangles = 0; } @@ -364,10 +362,10 @@ namespace D3D // Unlock and render the vertex buffer m_pVB->Unlock(); - if( dwNumTriangles > 0 ) + if (dwNumTriangles > 0) { - // dev->DrawPrimitive( D3DPT_TRIANGLELIST, 0, dwNumTriangles ); - Renderer::DrawPrimitive( D3DPT_TRIANGLELIST, 0, dwNumTriangles ); + // dev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, dwNumTriangles); + dev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, dwNumTriangles); } RestoreRenderStates(); return S_OK; @@ -386,12 +384,10 @@ namespace D3D dev->SetVertexShader(0); dev->SetVertexDeclaration(0); - // dev->SetFVF(D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX1); - // dev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,2,coords,sizeof(Q2DVertex)); Renderer::SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1); - Renderer::DrawPrimitiveUP(D3DPT_TRIANGLEFAN,2,coords,sizeof(Q2DVertex)); + dev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, coords, sizeof(Q2DVertex)); RestoreRenderStates(); } -} +} // namespace diff --git a/Source/Plugins/Plugin_VideoDX9/Src/DlgSettings.cpp b/Source/Plugins/Plugin_VideoDX9/Src/DlgSettings.cpp index c272111cfd..1fe89bee1c 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/DlgSettings.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/DlgSettings.cpp @@ -112,12 +112,12 @@ struct TabAdvanced : public W32Util::Tab { void Init(HWND hDlg) { - HWND opt = GetDlgItem(hDlg,IDC_DLOPTLEVEL); - ComboBox_AddString(opt,"0: Interpret (slowest, most compatible)"); - ComboBox_AddString(opt,"1: Compile lists and decode vertex lists"); +// HWND opt = GetDlgItem(hDlg,IDC_DLOPTLEVEL); +// ComboBox_AddString(opt,"0: Interpret (slowest, most compatible)"); +// ComboBox_AddString(opt,"1: Compile lists and decode vertex lists"); //ComboBox_AddString(opt,"2: Compile+decode to vbufs and use hw xform"); //ComboBox_AddString(opt,"Recompile to vbuffers and shaders"); - ComboBox_SetCurSel(opt,g_Config.iCompileDLsLevel); +// ComboBox_SetCurSel(opt,g_Config.iCompileDLsLevel); Button_SetCheck(GetDlgItem(hDlg,IDC_OVERLAYSTATS), g_Config.bOverlayStats); Button_SetCheck(GetDlgItem(hDlg,IDC_WIREFRAME), g_Config.bWireFrame); @@ -158,7 +158,6 @@ struct TabAdvanced : public W32Util::Tab g_Config.bOverlayStats = Button_GetCheck(GetDlgItem(hDlg,IDC_OVERLAYSTATS)) ? true : false; g_Config.bWireFrame = Button_GetCheck(GetDlgItem(hDlg,IDC_WIREFRAME)) ? true : false; g_Config.bDumpTextures = Button_GetCheck(GetDlgItem(hDlg,IDC_TEXDUMP)) ? true : false; - g_Config.iCompileDLsLevel = (int)ComboBox_GetCurSel(GetDlgItem(hDlg,IDC_DLOPTLEVEL)); g_Config.bShowShaderErrors = Button_GetCheck(GetDlgItem(hDlg,IDC_SHOWSHADERERRORS)) ? true : false; char temp[MAX_PATH]; GetWindowText(GetDlgItem(hDlg,IDC_TEXDUMPPATH), temp, MAX_PATH); @@ -166,26 +165,6 @@ struct TabAdvanced : public W32Util::Tab } }; -struct TabDebug : public W32Util::Tab -{ - void Init(HWND hDlg) - { - } - void Command(HWND hDlg,WPARAM wParam) - { - /* - switch (LOWORD(wParam)) - { - default: - break; - } - */ - } - void Apply(HWND hDlg) - { - } -}; - struct TabEnhancements : public W32Util::Tab { void Init(HWND hDlg) @@ -234,7 +213,6 @@ void DlgSettings_Show(HINSTANCE hInstance, HWND _hParent) sheet.Add(new TabDirect3D,(LPCTSTR)IDD_SETTINGS,"Direct3D"); sheet.Add(new TabEnhancements,(LPCTSTR)IDD_ENHANCEMENTS,"Enhancements"); sheet.Add(new TabAdvanced,(LPCTSTR)IDD_ADVANCED,"Advanced"); - //sheet.Add(new TabDebug,(LPCTSTR)IDD_DEBUGGER,"Debugger"); sheet.Show(hInstance,_hParent,"Graphics Plugin"); g_Config.Save(); diff --git a/Source/Plugins/Plugin_VideoDX9/Src/PixelShader.h b/Source/Plugins/Plugin_VideoDX9/Src/PixelShader.h index 43c65518f9..bc4b6327a5 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/PixelShader.h +++ b/Source/Plugins/Plugin_VideoDX9/Src/PixelShader.h @@ -20,11 +20,11 @@ #include "Common.h" #include "D3DShader.h" -const char *GeneratePixelShader(); - #define PS_CONST_COLORS 0 #define PS_CONST_KCOLORS 4 #define PS_CONST_CONSTALPHA 8 #define PS_CONST_ALPHAREF 9 // x,y #define PS_CONST_INDMTXSTART 10 -#define PS_CONST_INDSIZE 2 \ No newline at end of file +#define PS_CONST_INDSIZE 2 + +const char *GeneratePixelShader(); diff --git a/Source/Plugins/Plugin_VideoDX9/Src/PixelShaderManager.cpp b/Source/Plugins/Plugin_VideoDX9/Src/PixelShaderManager.cpp index f174591cf5..9952cf8866 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/PixelShaderManager.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/PixelShaderManager.cpp @@ -24,7 +24,6 @@ #include "BPMemory.h" #include "XFMemory.h" - PShaderCache::PSCache PShaderCache::pshaders; //I hope we don't get too many hash collisions :p diff --git a/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp b/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp index fc9fb46757..c726f6ad5f 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/Render.cpp @@ -39,7 +39,8 @@ float Renderer::m_x,Renderer::m_y,Renderer::m_width, Renderer::m_height, Renderer::xScale,Renderer::yScale; std::vector Renderer::m_Textures; -DWORD Renderer::m_RenderStates[MaxRenderStates]; + +DWORD Renderer::m_RenderStates[MaxRenderStates+46]; DWORD Renderer::m_TextureStageStates[MaxTextureStages][MaxTextureTypes]; DWORD Renderer::m_SamplerStates[MaxSamplerSize][MaxSamplerTypes]; DWORD Renderer::m_FVF; @@ -430,15 +431,3 @@ void Renderer::SetSamplerState( DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD V D3D::dev->SetSamplerState( Sampler, Type, Value ); } } - - -void Renderer::DrawPrimitiveUP( D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, const void* pVertexStreamZeroData, UINT VertexStreamZeroStride ) -{ - D3D::dev->DrawPrimitiveUP( PrimitiveType, PrimitiveCount, pVertexStreamZeroData, VertexStreamZeroStride ); -} - - -void Renderer::DrawPrimitive( D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount ) -{ - D3D::dev->DrawPrimitive( PrimitiveType, StartVertex, PrimitiveCount ); -} diff --git a/Source/Plugins/Plugin_VideoDX9/Src/Render.h b/Source/Plugins/Plugin_VideoDX9/Src/Render.h index 0f3db82d84..d8aa35185f 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/Render.h +++ b/Source/Plugins/Plugin_VideoDX9/Src/Render.h @@ -18,29 +18,33 @@ #ifndef __H_RENDER__ #define __H_RENDER__ -#include "PluginSpecs_Video.h" #include #include -#include "D3DBase.h" +#include "pluginspecs_video.h" +#include "D3DBase.h" class Renderer { // screen offset - static float m_x,m_y,m_width, m_height,xScale,yScale; + static float m_x; + static float m_y; + static float m_width; + static float m_height; + static float xScale; + static float yScale; const static int MaxTextureStages = 9; const static int MaxRenderStates = 210; const static DWORD MaxTextureTypes = 33; const static DWORD MaxSamplerSize = 13; const static DWORD MaxSamplerTypes = 15; static std::vector m_Textures; - static DWORD m_RenderStates[MaxRenderStates]; + static DWORD m_RenderStates[MaxRenderStates+46]; static DWORD m_TextureStageStates[MaxTextureStages][MaxTextureTypes]; static DWORD m_SamplerStates[MaxSamplerSize][MaxSamplerTypes]; static DWORD m_FVF; public: - static void Init(SVideoInitialize &_VideoInitialize); static void Shutdown(); @@ -58,64 +62,17 @@ public: static void SetViewport(float* _Viewport); static void SetProjection(float* _pProjection, int constantIndex = -1); - + // The little status display. static void AddMessage(const std::string &message, unsigned int ms); static void ProcessMessages(); static void RenderText(const std::string &text, int left, int top, unsigned int color); - /** - * Assigns a texture to a device stage. - * @param Stage Stage to assign to. - * @param pTexture Texture to be assigned. - */ + // The following are "filtered" versions of the corresponding D3Ddev-> functions. static void SetTexture( DWORD Stage, IDirect3DBaseTexture9 *pTexture ); - - /** - * Sets the current vertex stream declaration. - * @param FVF Fixed function vertex type - */ static void SetFVF( DWORD FVF ); - - /** - * Sets a single device render-state parameter. - * @param State Device state variable that is being modified. - * @param Value New value for the device render state to be set. - */ static void SetRenderState( D3DRENDERSTATETYPE State, DWORD Value ); - - /** - * Sets the state value for the currently assigned texture. - * @param Stage Stage identifier of the texture for which the state value is set. - * @param Type Texture state to set. - * @param Value State value to set. - */ static void SetTextureStageState( DWORD Stage, D3DTEXTURESTAGESTATETYPE Type,DWORD Value ); - - /** - * Sets the sampler state value. - * @param Sampler The sampler stage index. - * @param Type Type of the sampler. - * @param Value State value to set. - */ static void SetSamplerState( DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value ); - - /** - * Renders data specified by a user memory pointer as a sequence of geometric primitives of the specified type. - * @param PrimitiveType Type of primitive to render. - * @param PrimitiveCount Number of primitives to render. - * @param pVertexStreamZeroData User memory pointer to the vertex data. - * @param VertexStreamZeroStride The number of bytes of data for each vertex. - */ - static void DrawPrimitiveUP(D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, - const void* pVertexStreamZeroData, UINT VertexStreamZeroStride); - - /** - * Renders a sequence of non indexed, geometric primitives of the specified type from the current set of data input streams. - * @param PrimitiveType Type of primitive to render. - * @param StartVertex Index of the first vertex to load. - * @param PrimitiveCount Number of primitives to render. - */ - static void DrawPrimitive(D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount); }; #endif // __H_RENDER__ diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexLoader.cpp b/Source/Plugins/Plugin_VideoDX9/Src/VertexLoader.cpp index 2e3791cdd1..b21eb175ff 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/VertexLoader.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/VertexLoader.cpp @@ -361,39 +361,3 @@ void VertexLoader::RunVertices(int count) ((void (*)())((void*)&m_compiledCode[0]))(); }*/ } - -DecodedVArray tempvarray; - -namespace VertexLoaderManager -{ - -void Init() -{ - tempvarray.Create(65536*3, 1, 8, 3, 2, 8); -} - -void Shutdown() -{ - tempvarray.Destroy(); -} - -int GetVertexSize(int vat) -{ - VertexLoader& vtxLoader = g_VertexLoaders[vat]; - vtxLoader.Setup(); - return vtxLoader.GetVertexSize(); -} - -void RunVertices(int vat, int primitive, int num_vertices) -{ - tempvarray.Reset(); - VertexLoader::SetVArray(&tempvarray); - VertexLoader& vtxLoader = g_VertexLoaders[vat]; - vtxLoader.Setup(); - vtxLoader.PrepareRun(); - int vsize = vtxLoader.GetVertexSize(); - vtxLoader.RunVertices(num_vertices); - VertexManager::AddVertices(primitive, num_vertices, &tempvarray); -} - -} \ No newline at end of file diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexLoaderManager.cpp b/Source/Plugins/Plugin_VideoDX9/Src/VertexLoaderManager.cpp new file mode 100644 index 0000000000..0d0fce5aa9 --- /dev/null +++ b/Source/Plugins/Plugin_VideoDX9/Src/VertexLoaderManager.cpp @@ -0,0 +1,56 @@ +// Copyright (C) 2003-2008 Dolphin Project. + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 2.0. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + +#include "VideoCommon.h" +#include "VertexLoader.h" +#include "VertexManager.h" + +DecodedVArray tempvarray; + +namespace VertexLoaderManager +{ + +void Init() +{ + tempvarray.Create(65536*3, 1, 8, 3, 2, 8); +} + +void Shutdown() +{ + tempvarray.Destroy(); +} + +int GetVertexSize(int vat) +{ + VertexLoader& vtxLoader = g_VertexLoaders[vat]; + vtxLoader.Setup(); + return vtxLoader.GetVertexSize(); +} + +void RunVertices(int vat, int primitive, int num_vertices) +{ + tempvarray.Reset(); + VertexLoader::SetVArray(&tempvarray); + VertexLoader& vtxLoader = g_VertexLoaders[vat]; + vtxLoader.Setup(); + vtxLoader.PrepareRun(); + int vsize = vtxLoader.GetVertexSize(); + vtxLoader.RunVertices(num_vertices); + VertexManager::AddVertices(primitive, num_vertices, &tempvarray); +} + +} \ No newline at end of file diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp index 23b0b97cce..3e58d8d1fc 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.cpp @@ -230,12 +230,7 @@ void Flush() else { D3D::dev->SetIndices(0); - - // D3D::dev->DrawPrimitiveUP(D3DPT_POINTLIST, - // numVertices, - // fakeVBuffer, - // sizeof(D3DVertex)); - Renderer::DrawPrimitiveUP( D3DPT_POINTLIST, numVertices, fakeVBuffer, sizeof(D3DVertex) ); + D3D::dev->DrawPrimitiveUP(D3DPT_POINTLIST, numVertices, fakeVBuffer, sizeof(D3DVertex)); } } collection = C_NOTHING; diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.h b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.h index a860130b94..6a90fd7d16 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.h +++ b/Source/Plugins/Plugin_VideoDX9/Src/VertexManager.h @@ -15,8 +15,8 @@ // Official SVN repository and contact information can be found at // http://code.google.com/p/dolphin-emu/ - -#pragma once +#ifndef _VERTEXMANAGER_H +#define _VERTEXMANAGER_H #include "CPMemory.h" #include "VertexLoader.h" @@ -46,3 +46,5 @@ void AddVertices(int _primitive, int _numVertices, const DecodedVArray *varray); void Flush(); } // namespace + +#endif diff --git a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj index 7c635a2580..e1bae12743 100644 --- a/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj +++ b/Source/Plugins/Plugin_VideoOGL/Plugin_VideoOGL.vcproj @@ -764,38 +764,6 @@ RelativePath=".\Src\PixelShaderCache.h" > - - - - - - - - - - - - - @@ -912,6 +880,38 @@ RelativePath=".\Src\Logging\Logging.h" > + + + + + + + + + + + + + > s_vStoredPrimitives; // every element, mode and count to be passed to glDrawArrays -static u32 s_prevcomponents; // previous state set static const GLenum c_primitiveType[8] = { @@ -47,7 +46,6 @@ static const GLenum c_primitiveType[8] = bool Init() { - s_prevcomponents = 0; s_pBaseBufferPointer = (u8*)AllocateMemoryPages(MAX_BUFFER_SIZE); s_pCurBufferPointer = s_pBaseBufferPointer; @@ -91,7 +89,8 @@ int GetRemainingSize() void AddVertices(int primitive, int numvertices) { - _assert_( numvertices > 0 ); + _assert_(numvertices > 0); + _assert_(g_nativeVertexFmt != NULL); ADDSTAT(stats.thisFrame.numPrims, numvertices); if (s_vStoredPrimitives.size() && s_vStoredPrimitives[s_vStoredPrimitives.size() - 1].first == c_primitiveType[primitive]) { @@ -137,8 +136,8 @@ void Flush() for (int i = 0; i < xfregs.numTexGens; ++i) { TexMtxInfo tinfo = xfregs.texcoords[i].texmtxinfo; - if (tinfo.texgentype != XF_TEXGEN_EMBOSS_MAP ) tinfo.hex &= 0x7ff; - if (tinfo.texgentype != XF_TEXGEN_REGULAR ) tinfo.projection = 0; + if (tinfo.texgentype != XF_TEXGEN_EMBOSS_MAP) tinfo.hex &= 0x7ff; + if (tinfo.texgentype != XF_TEXGEN_REGULAR) tinfo.projection = 0; PRIM_LOG("txgen%d: proj=%d, input=%d, gentype=%d, srcrow=%d, embsrc=%d, emblght=%d, postmtx=%d, postnorm=%d\n", i, tinfo.projection, tinfo.inputform, tinfo.texgentype, tinfo.sourcerow, tinfo.embosssourceshift, tinfo.embosslightshift, @@ -199,6 +198,7 @@ void Flush() TextureMngr::EnableTexRECT(i); } // if texture is power of two, set to ones (since don't need scaling) + // (the above seems to have changed - we set the width and height here too. else { PixelShaderManager::SetTexDims(i, tentry->w, tentry->h, 0, 0); @@ -225,13 +225,13 @@ void Flush() } FRAGMENTSHADER* ps = PixelShaderCache::GetShader(); - VERTEXSHADER* vs = VertexShaderCache::GetShader(s_prevcomponents); + VERTEXSHADER* vs = VertexShaderCache::GetShader(g_nativeVertexFmt->m_components); bool bRestoreBuffers = false; if (Renderer::GetZBufferTarget()) { if (bpmem.zmode.updateenable) { if (!bpmem.blendmode.colorupdate) { - Renderer::SetRenderMode(bpmem.blendmode.alphaupdate?Renderer::RM_ZBufferAlpha:Renderer::RM_ZBufferOnly); + Renderer::SetRenderMode(bpmem.blendmode.alphaupdate ? Renderer::RM_ZBufferAlpha : Renderer::RM_ZBufferOnly); } } else { @@ -298,81 +298,4 @@ void Flush() ResetBuffer(); } -// This should move into NativeVertexFormat -void EnableComponents(u32 components) -{ - if (s_prevcomponents != components) { - if (s_vStoredPrimitives.size() != 0) - VertexManager::Flush(); - - // matrices - if ((components & VB_HAS_POSMTXIDX) != (s_prevcomponents & VB_HAS_POSMTXIDX)) { - if (components & VB_HAS_POSMTXIDX) - glEnableVertexAttribArray(SHADER_POSMTX_ATTRIB); - else - glDisableVertexAttribArray(SHADER_POSMTX_ATTRIB); - } - - // normals - if ((components & VB_HAS_NRM0) != (s_prevcomponents & VB_HAS_NRM0)) { - if (components & VB_HAS_NRM0) - glEnableClientState(GL_NORMAL_ARRAY); - else - glDisableClientState(GL_NORMAL_ARRAY); - } - if ((components & VB_HAS_NRM1) != (s_prevcomponents & VB_HAS_NRM1)) { - if (components & VB_HAS_NRM1) { - glEnableVertexAttribArray(SHADER_NORM1_ATTRIB); - glEnableVertexAttribArray(SHADER_NORM2_ATTRIB); - } - else { - glDisableVertexAttribArray(SHADER_NORM1_ATTRIB); - glDisableVertexAttribArray(SHADER_NORM2_ATTRIB); - } - } - - // color - for (int i = 0; i < 2; ++i) { - if ((components & (VB_HAS_COL0 << i)) != (s_prevcomponents & (VB_HAS_COL0 << i))) { - if (components & (VB_HAS_COL0 << 0)) - glEnableClientState(i ? GL_SECONDARY_COLOR_ARRAY : GL_COLOR_ARRAY); - else - glDisableClientState(i ? GL_SECONDARY_COLOR_ARRAY : GL_COLOR_ARRAY); - } - } - - // tex - if (!g_Config.bDisableTexturing) { - for (int i = 0; i < 8; ++i) { - if ((components & (VB_HAS_UV0 << i)) != (s_prevcomponents & (VB_HAS_UV0 << i))) { - glClientActiveTexture(GL_TEXTURE0 + i); - if (components & (VB_HAS_UV0 << i)) - glEnableClientState(GL_TEXTURE_COORD_ARRAY); - else - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - } - } - } - else // Disable Texturing - { - for (int i = 0; i < 8; ++i) { - glClientActiveTexture(GL_TEXTURE0 + i); - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - } - } - - - // Disable Lighting - // TODO - move to better spot - if (g_Config.bDisableLighting) { - for (int i = 0; i < xfregs.nNumChans; i++) - { - xfregs.colChans[i].alpha.enablelighting = false; - xfregs.colChans[i].color.enablelighting = false; - } - } - s_prevcomponents = components; - } -} - } // namespace