dx9: rotate 90deg

This commit is contained in:
flyinghead 2021-04-16 21:58:37 +02:00
parent abc8b18b78
commit 28d2c6db73
1 changed files with 48 additions and 9 deletions

View File

@ -1159,6 +1159,8 @@ void D3DRenderer::renderFramebuffer()
else else
sx = (int)roundf((screen_width - renderAR * screen_height) / 2.f); sx = (int)roundf((screen_width - renderAR * screen_height) / 2.f);
if (!config::Rotate90)
{
RECT rs { 0, 0, (long)width, (long)height }; RECT rs { 0, 0, (long)width, (long)height };
RECT rd { 0, 0, screen_width, screen_height }; RECT rd { 0, 0, screen_width, screen_height };
if (sx != 0) if (sx != 0)
@ -1171,9 +1173,46 @@ void D3DRenderer::renderFramebuffer()
rs.left = fx; rs.left = fx;
rs.right = width - fx; rs.right = width - fx;
} }
// FIXME rotate
device->StretchRect(framebufferSurface, &rs, backbuffer, &rd, D3DTEXF_LINEAR); // This can fail if window is minimized device->StretchRect(framebufferSurface, &rs, backbuffer, &rd, D3DTEXF_LINEAR); // This can fail if window is minimized
} }
else
{
device->SetPixelShader(NULL);
device->SetVertexShader(NULL);
device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
device->SetRenderState(D3DRS_ZENABLE, FALSE);
device->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
device->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE);
device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
glm::mat4 identity = glm::identity<glm::mat4>();
glm::mat4 projection = glm::translate(glm::vec3(-1.f / screen_width, 1.f / screen_height, 0))
* glm::rotate((float)M_PI_2, glm::vec3(0, 0, 1));
device->SetTransform(D3DTS_WORLD, (const D3DMATRIX *)&identity[0][0]);
device->SetTransform(D3DTS_VIEW, (const D3DMATRIX *)&identity[0][0]);
device->SetTransform(D3DTS_PROJECTION, (const D3DMATRIX *)&projection[0][0]);
device->SetFVF(D3DFVF_XYZ | D3DFVF_TEX1);
D3DVIEWPORT9 viewport;
viewport.X = sx;
viewport.Y = fx * screen_width / height;
viewport.Width = screen_width - sx * 2;
viewport.Height = screen_height - 2 * fx * screen_width / height;
viewport.MinZ = 0;
viewport.MaxZ = 1;
verifyWin(device->SetViewport(&viewport));
float coords[] {
-1, 1, 0.5f, 0, 0,
-1, -1, 0.5f, 0, 1,
1, 1, 0.5f, 1, 0,
1, -1, 0.5f, 1, 1,
};
device->SetTexture(0, framebufferTexture);
device->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, coords, sizeof(float) * 5);
}
}
bool D3DRenderer::RenderLastFrame() bool D3DRenderer::RenderLastFrame()
{ {