mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-10 08:09:26 +01:00
Merge pull request #2378 from lioncash/ogl
OGL: Minor changes in Render.cpp.
This commit is contained in:
commit
4c3984053d
@ -6,6 +6,7 @@
|
|||||||
#include <cinttypes>
|
#include <cinttypes>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -1002,8 +1003,6 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
|
|||||||
{
|
{
|
||||||
case PEEK_Z:
|
case PEEK_Z:
|
||||||
{
|
{
|
||||||
u32 z;
|
|
||||||
|
|
||||||
if (!s_efbCacheValid[0][cacheRectIdx])
|
if (!s_efbCacheValid[0][cacheRectIdx])
|
||||||
{
|
{
|
||||||
if (s_MSAASamples > 1)
|
if (s_MSAASamples > 1)
|
||||||
@ -1017,19 +1016,17 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
|
|||||||
g_renderer->RestoreAPIState();
|
g_renderer->RestoreAPIState();
|
||||||
}
|
}
|
||||||
|
|
||||||
float* depthMap = new float[targetPixelRcWidth * targetPixelRcHeight];
|
std::unique_ptr<float> depthMap(new float[targetPixelRcWidth * targetPixelRcHeight]);
|
||||||
|
|
||||||
glReadPixels(targetPixelRc.left, targetPixelRc.bottom, targetPixelRcWidth, targetPixelRcHeight,
|
glReadPixels(targetPixelRc.left, targetPixelRc.bottom, targetPixelRcWidth, targetPixelRcHeight,
|
||||||
GL_DEPTH_COMPONENT, GL_FLOAT, depthMap);
|
GL_DEPTH_COMPONENT, GL_FLOAT, depthMap.get());
|
||||||
|
|
||||||
UpdateEFBCache(type, cacheRectIdx, efbPixelRc, targetPixelRc, depthMap);
|
UpdateEFBCache(type, cacheRectIdx, efbPixelRc, targetPixelRc, depthMap.get());
|
||||||
|
|
||||||
delete[] depthMap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 xRect = x % EFB_CACHE_RECT_SIZE;
|
u32 xRect = x % EFB_CACHE_RECT_SIZE;
|
||||||
u32 yRect = y % EFB_CACHE_RECT_SIZE;
|
u32 yRect = y % EFB_CACHE_RECT_SIZE;
|
||||||
z = s_efbCache[0][cacheRectIdx][yRect * EFB_CACHE_RECT_SIZE + xRect];
|
u32 z = s_efbCache[0][cacheRectIdx][yRect * EFB_CACHE_RECT_SIZE + xRect];
|
||||||
|
|
||||||
// if Z is in 16 bit format you must return a 16 bit integer
|
// if Z is in 16 bit format you must return a 16 bit integer
|
||||||
if (bpmem.zcontrol.pixel_format == PEControl::RGB565_Z16)
|
if (bpmem.zcontrol.pixel_format == PEControl::RGB565_Z16)
|
||||||
@ -1045,9 +1042,6 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
|
|||||||
// Tested in Killer 7, the first 8bits represent the alpha value which is used to
|
// Tested in Killer 7, the first 8bits represent the alpha value which is used to
|
||||||
// determine if we're aiming at an enemy (0x80 / 0x88) or not (0x70)
|
// determine if we're aiming at an enemy (0x80 / 0x88) or not (0x70)
|
||||||
// Wind Waker is also using it for the pictograph to determine the color of each pixel
|
// Wind Waker is also using it for the pictograph to determine the color of each pixel
|
||||||
|
|
||||||
u32 color;
|
|
||||||
|
|
||||||
if (!s_efbCacheValid[1][cacheRectIdx])
|
if (!s_efbCacheValid[1][cacheRectIdx])
|
||||||
{
|
{
|
||||||
if (s_MSAASamples > 1)
|
if (s_MSAASamples > 1)
|
||||||
@ -1061,24 +1055,22 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data)
|
|||||||
g_renderer->RestoreAPIState();
|
g_renderer->RestoreAPIState();
|
||||||
}
|
}
|
||||||
|
|
||||||
u32* colorMap = new u32[targetPixelRcWidth * targetPixelRcHeight];
|
std::unique_ptr<u32> colorMap(new u32[targetPixelRcWidth * targetPixelRcHeight]);
|
||||||
|
|
||||||
if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3)
|
if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3)
|
||||||
// XXX: Swap colours
|
// XXX: Swap colours
|
||||||
glReadPixels(targetPixelRc.left, targetPixelRc.bottom, targetPixelRcWidth, targetPixelRcHeight,
|
glReadPixels(targetPixelRc.left, targetPixelRc.bottom, targetPixelRcWidth, targetPixelRcHeight,
|
||||||
GL_RGBA, GL_UNSIGNED_BYTE, colorMap);
|
GL_RGBA, GL_UNSIGNED_BYTE, colorMap.get());
|
||||||
else
|
else
|
||||||
glReadPixels(targetPixelRc.left, targetPixelRc.bottom, targetPixelRcWidth, targetPixelRcHeight,
|
glReadPixels(targetPixelRc.left, targetPixelRc.bottom, targetPixelRcWidth, targetPixelRcHeight,
|
||||||
GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, colorMap);
|
GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, colorMap.get());
|
||||||
|
|
||||||
UpdateEFBCache(type, cacheRectIdx, efbPixelRc, targetPixelRc, colorMap);
|
UpdateEFBCache(type, cacheRectIdx, efbPixelRc, targetPixelRc, colorMap.get());
|
||||||
|
|
||||||
delete[] colorMap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 xRect = x % EFB_CACHE_RECT_SIZE;
|
u32 xRect = x % EFB_CACHE_RECT_SIZE;
|
||||||
u32 yRect = y % EFB_CACHE_RECT_SIZE;
|
u32 yRect = y % EFB_CACHE_RECT_SIZE;
|
||||||
color = s_efbCache[1][cacheRectIdx][yRect * EFB_CACHE_RECT_SIZE + xRect];
|
u32 color = s_efbCache[1][cacheRectIdx][yRect * EFB_CACHE_RECT_SIZE + xRect];
|
||||||
|
|
||||||
// check what to do with the alpha channel (GX_PokeAlphaRead)
|
// check what to do with the alpha channel (GX_PokeAlphaRead)
|
||||||
PixelEngine::UPEAlphaReadReg alpha_read_mode = PixelEngine::GetAlphaReadMode();
|
PixelEngine::UPEAlphaReadReg alpha_read_mode = PixelEngine::GetAlphaReadMode();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user