(d3d9/d3d_overlays.cpp) style nits / cleanups

This commit is contained in:
twinaphex 2014-09-08 20:13:57 +02:00
parent b376edd0ed
commit ee963d8484
1 changed files with 53 additions and 26 deletions

View File

@ -1,5 +1,7 @@
static void d3d_overlay_render(void *data, overlay_t *overlay) static void d3d_overlay_render(void *data, overlay_t *overlay)
{ {
void *verts;
unsigned i;
d3d_video_t *d3d = (d3d_video_t*)data; d3d_video_t *d3d = (d3d_video_t*)data;
if (!overlay || !overlay->tex) if (!overlay || !overlay->tex)
@ -15,10 +17,12 @@ static void d3d_overlay_render(void *data, overlay_t *overlay)
if (!overlay->vert_buf) if (!overlay->vert_buf)
{ {
D3DDevice_CreateVertexBuffers(d3d->dev, sizeof(vert), D3DDevice_CreateVertexBuffers(d3d->dev, sizeof(vert),
d3d->dev->GetSoftwareVertexProcessing() ? D3DUSAGE_SOFTWAREPROCESSING : 0, 0, D3DPOOL_MANAGED, &overlay->vert_buf, NULL); d3d->dev->GetSoftwareVertexProcessing() ?
D3DUSAGE_SOFTWAREPROCESSING : 0, 0, D3DPOOL_MANAGED,
&overlay->vert_buf, NULL);
} }
for (unsigned i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
vert[i].z = 0.5f; vert[i].z = 0.5f;
vert[i].r = vert[i].g = vert[i].b = 1.0f; vert[i].r = vert[i].g = vert[i].b = 1.0f;
@ -29,13 +33,17 @@ static void d3d_overlay_render(void *data, overlay_t *overlay)
float overlay_height = d3d->final_viewport.Height; float overlay_height = d3d->final_viewport.Height;
vert[0].x = overlay->vert_coords.x * overlay_width; vert[0].x = overlay->vert_coords.x * overlay_width;
vert[1].x = (overlay->vert_coords.x + overlay->vert_coords.w) * overlay_width; vert[1].x = (overlay->vert_coords.x + overlay->vert_coords.w)
* overlay_width;
vert[2].x = overlay->vert_coords.x * overlay_width; vert[2].x = overlay->vert_coords.x * overlay_width;
vert[3].x = (overlay->vert_coords.x + overlay->vert_coords.w) * overlay_width; vert[3].x = (overlay->vert_coords.x + overlay->vert_coords.w)
* overlay_width;
vert[0].y = overlay->vert_coords.y * overlay_height; vert[0].y = overlay->vert_coords.y * overlay_height;
vert[1].y = overlay->vert_coords.y * overlay_height; vert[1].y = overlay->vert_coords.y * overlay_height;
vert[2].y = (overlay->vert_coords.y + overlay->vert_coords.h) * overlay_height; vert[2].y = (overlay->vert_coords.y + overlay->vert_coords.h)
vert[3].y = (overlay->vert_coords.y + overlay->vert_coords.h) * overlay_height; * overlay_height;
vert[3].y = (overlay->vert_coords.y + overlay->vert_coords.h)
* overlay_height;
vert[0].u = overlay->tex_coords.x; vert[0].u = overlay->tex_coords.x;
vert[1].u = overlay->tex_coords.x + overlay->tex_coords.w; vert[1].u = overlay->tex_coords.x + overlay->tex_coords.w;
@ -46,14 +54,13 @@ static void d3d_overlay_render(void *data, overlay_t *overlay)
vert[2].v = overlay->tex_coords.y + overlay->tex_coords.h; vert[2].v = overlay->tex_coords.y + overlay->tex_coords.h;
vert[3].v = overlay->tex_coords.y + overlay->tex_coords.h; vert[3].v = overlay->tex_coords.y + overlay->tex_coords.h;
// Align texels and vertices. /* Align texels and vertices. */
for (unsigned i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
vert[i].x -= 0.5f; vert[i].x -= 0.5f;
vert[i].y += 0.5f; vert[i].y += 0.5f;
} }
void *verts;
overlay->vert_buf->Lock(0, sizeof(vert), &verts, 0); overlay->vert_buf->Lock(0, sizeof(vert), &verts, 0);
memcpy(verts, vert, sizeof(vert)); memcpy(verts, vert, sizeof(vert));
overlay->vert_buf->Unlock(); overlay->vert_buf->Unlock();
@ -66,9 +73,12 @@ static void d3d_overlay_render(void *data, overlay_t *overlay)
#ifndef _XBOX1 #ifndef _XBOX1
// set vertex decl for overlay // set vertex decl for overlay
D3DVERTEXELEMENT vElems[4] = { D3DVERTEXELEMENT vElems[4] = {
{0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0}, {0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT,
{0, 12, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0}, D3DDECLUSAGE_POSITION, 0},
{0, 20, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0}, {0, 12, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT,
D3DDECLUSAGE_TEXCOORD, 0},
{0, 20, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT,
D3DDECLUSAGE_COLOR, 0},
D3DDECL_END() D3DDECL_END()
}; };
LPDIRECT3DVERTEXDECLARATION vertex_decl; LPDIRECT3DVERTEXDECLARATION vertex_decl;
@ -77,11 +87,12 @@ static void d3d_overlay_render(void *data, overlay_t *overlay)
vertex_decl->Release(); vertex_decl->Release();
#endif #endif
D3DDevice_SetStreamSources(d3d->dev, 0, overlay->vert_buf, 0, sizeof(overlay_vertex)); D3DDevice_SetStreamSources(d3d->dev, 0, overlay->vert_buf,
0, sizeof(overlay_vertex));
if (overlay->fullscreen) if (overlay->fullscreen)
{ {
// set viewport to full window /* Set viewport to full window. */
D3DVIEWPORT vp_full; D3DVIEWPORT vp_full;
vp_full.X = 0; vp_full.X = 0;
vp_full.Y = 0; vp_full.Y = 0;
@ -92,7 +103,7 @@ static void d3d_overlay_render(void *data, overlay_t *overlay)
d3d->dev->SetViewport(&vp_full); d3d->dev->SetViewport(&vp_full);
} }
// render overlay /* Render overlay. */
d3d->dev->SetTexture(0, overlay->tex); d3d->dev->SetTexture(0, overlay->tex);
D3DDevice_SetSamplerState_AddressU(d3d->dev, 0, D3DTADDRESS_BORDER); D3DDevice_SetSamplerState_AddressU(d3d->dev, 0, D3DTADDRESS_BORDER);
D3DDevice_SetSamplerState_AddressV(d3d->dev, 0, D3DTADDRESS_BORDER); D3DDevice_SetSamplerState_AddressV(d3d->dev, 0, D3DTADDRESS_BORDER);
@ -100,7 +111,7 @@ static void d3d_overlay_render(void *data, overlay_t *overlay)
D3DDevice_SetSamplerState_MagFilter(d3d->dev, 0, D3DTEXF_LINEAR); D3DDevice_SetSamplerState_MagFilter(d3d->dev, 0, D3DTEXF_LINEAR);
D3DDevice_DrawPrimitive(d3d->dev, D3DPT_TRIANGLESTRIP, 0, 2); D3DDevice_DrawPrimitive(d3d->dev, D3DPT_TRIANGLESTRIP, 0, 2);
// restore previous state /* Restore previous state. */
d3d->dev->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE); d3d->dev->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
d3d->dev->SetViewport(&d3d->final_viewport); d3d->dev->SetViewport(&d3d->final_viewport);
} }
@ -108,6 +119,7 @@ static void d3d_overlay_render(void *data, overlay_t *overlay)
void d3d_free_overlay(void *data, overlay_t *overlay) void d3d_free_overlay(void *data, overlay_t *overlay)
{ {
d3d_video_t *d3d = (d3d_video_t*)data; d3d_video_t *d3d = (d3d_video_t*)data;
if (overlay->tex) if (overlay->tex)
overlay->tex->Release(); overlay->tex->Release();
if (overlay->vert_buf) if (overlay->vert_buf)
@ -116,8 +128,10 @@ void d3d_free_overlay(void *data, overlay_t *overlay)
void d3d_free_overlays(void *data) void d3d_free_overlays(void *data)
{ {
unsigned i;
d3d_video_t *d3d = (d3d_video_t*)data; d3d_video_t *d3d = (d3d_video_t*)data;
for (unsigned i = 0; i < d3d->overlays.size(); i++)
for (i = 0; i < d3d->overlays.size(); i++)
d3d_free_overlay(d3d, &d3d->overlays[i]); d3d_free_overlay(d3d, &d3d->overlays[i]);
d3d->overlays.clear(); d3d->overlays.clear();
} }
@ -150,18 +164,24 @@ static void d3d_overlay_vertex_geom(void *data,
d3d->overlays[index].vert_coords.h = h; d3d->overlays[index].vert_coords.h = h;
} }
static bool d3d_overlay_load(void *data, const texture_image *images, unsigned num_images) static bool d3d_overlay_load(void *data,
const texture_image *images, unsigned num_images)
{ {
unsigned i, y;
d3d_video_t *d3d = (d3d_video_t*)data; d3d_video_t *d3d = (d3d_video_t*)data;
d3d_free_overlays(data); d3d_free_overlays(data);
d3d->overlays.resize(num_images); d3d->overlays.resize(num_images);
for (unsigned i = 0; i < num_images; i++) for (i = 0; i < num_images; i++)
{ {
unsigned width = images[i].width; unsigned width = images[i].width;
unsigned height = images[i].height; unsigned height = images[i].height;
overlay_t &overlay = d3d->overlays[i]; overlay_t &overlay = d3d->overlays[i];
if (FAILED(d3d->dev->CreateTexture(width, height, 1,
if (FAILED(d3d->dev->CreateTexture(
width,
height,
1,
0, 0,
D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8,
D3DPOOL_MANAGED, D3DPOOL_MANAGED,
@ -172,19 +192,23 @@ static bool d3d_overlay_load(void *data, const texture_image *images, unsigned n
} }
D3DLOCKED_RECT d3dlr; D3DLOCKED_RECT d3dlr;
if (SUCCEEDED(overlay.tex->LockRect(0, &d3dlr, NULL, D3DLOCK_NOSYSLOCK))) if (SUCCEEDED(overlay.tex->LockRect(0, &d3dlr,
NULL, D3DLOCK_NOSYSLOCK)))
{ {
uint32_t *dst = static_cast<uint32_t*>(d3dlr.pBits); uint32_t *dst = static_cast<uint32_t*>(d3dlr.pBits);
const uint32_t *src = images[i].pixels; const uint32_t *src = images[i].pixels;
unsigned pitch = d3dlr.Pitch >> 2; unsigned pitch = d3dlr.Pitch >> 2;
for (unsigned y = 0; y < height; y++, dst += pitch, src += width) for (y = 0; y < height; y++, dst += pitch, src += width)
memcpy(dst, src, width << 2); memcpy(dst, src, width << 2);
overlay.tex->UnlockRect(0); overlay.tex->UnlockRect(0);
} }
overlay.tex_w = width; overlay.tex_w = width;
overlay.tex_h = height; overlay.tex_h = height;
d3d_overlay_tex_geom(d3d, i, 0, 0, 1, 1); // Default. Stretch to whole screen.
/* Default. Stretch to whole screen. */
d3d_overlay_tex_geom(d3d, i, 0, 0, 1, 1);
d3d_overlay_vertex_geom(d3d, i, 0, 0, 1, 1); d3d_overlay_vertex_geom(d3d, i, 0, 0, 1, 1);
} }
@ -193,9 +217,10 @@ static bool d3d_overlay_load(void *data, const texture_image *images, unsigned n
static void d3d_overlay_enable(void *data, bool state) static void d3d_overlay_enable(void *data, bool state)
{ {
unsigned i;
d3d_video_t *d3d = (d3d_video_t*)data; d3d_video_t *d3d = (d3d_video_t*)data;
for (unsigned i = 0; i < d3d->overlays.size(); i++) for (i = 0; i < d3d->overlays.size(); i++)
d3d->overlays_enabled = state; d3d->overlays_enabled = state;
if (d3d && d3d->ctx_driver && d3d->ctx_driver->show_mouse) if (d3d && d3d->ctx_driver && d3d->ctx_driver->show_mouse)
@ -204,9 +229,10 @@ static void d3d_overlay_enable(void *data, bool state)
static void d3d_overlay_full_screen(void *data, bool enable) static void d3d_overlay_full_screen(void *data, bool enable)
{ {
unsigned i;
d3d_video_t *d3d = (d3d_video_t*)data; d3d_video_t *d3d = (d3d_video_t*)data;
for (unsigned i = 0; i < d3d->overlays.size(); i++) for (i = 0; i < d3d->overlays.size(); i++)
d3d->overlays[i].fullscreen = enable; d3d->overlays[i].fullscreen = enable;
} }
@ -225,7 +251,8 @@ static const video_overlay_interface_t d3d_overlay_interface = {
d3d_overlay_set_alpha, d3d_overlay_set_alpha,
}; };
static void d3d_get_overlay_interface(void *data, const video_overlay_interface_t **iface) static void d3d_get_overlay_interface(void *data,
const video_overlay_interface_t **iface)
{ {
(void)data; (void)data;
*iface = &d3d_overlay_interface; *iface = &d3d_overlay_interface;