mirror of
https://github.com/libretro/RetroArch
synced 2025-03-01 07:13:35 +00:00
(PC D3D9) Go through d3dr pointer
This commit is contained in:
parent
7311d6503f
commit
8a670dd2c8
@ -599,6 +599,7 @@ static void d3d_viewport_info(void *data, struct rarch_viewport *vp)
|
|||||||
static bool d3d_read_viewport(void *data, uint8_t *buffer)
|
static bool d3d_read_viewport(void *data, uint8_t *buffer)
|
||||||
{
|
{
|
||||||
D3DVideo *d3d = reinterpret_cast<D3DVideo*>(data);
|
D3DVideo *d3d = reinterpret_cast<D3DVideo*>(data);
|
||||||
|
LPDIRECT3DDEVICE d3dr = d3d->dev;
|
||||||
|
|
||||||
RARCH_PERFORMANCE_INIT(d3d_read_viewport);
|
RARCH_PERFORMANCE_INIT(d3d_read_viewport);
|
||||||
RARCH_PERFORMANCE_START(d3d_read_viewport);
|
RARCH_PERFORMANCE_START(d3d_read_viewport);
|
||||||
@ -606,13 +607,13 @@ static bool d3d_read_viewport(void *data, uint8_t *buffer)
|
|||||||
LPDIRECT3DSURFACE target = NULL;
|
LPDIRECT3DSURFACE target = NULL;
|
||||||
LPDIRECT3DSURFACE dest = NULL;
|
LPDIRECT3DSURFACE dest = NULL;
|
||||||
|
|
||||||
if (FAILED(d3d->d3d_err = d3d->dev->GetRenderTarget(0, &target)))
|
if (FAILED(d3d->d3d_err = d3dr->GetRenderTarget(0, &target)))
|
||||||
{
|
{
|
||||||
ret = false;
|
ret = false;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAILED(d3d->d3d_err = d3d->dev->CreateOffscreenPlainSurface(d3d->screen_width,
|
if (FAILED(d3d->d3d_err = d3dr->CreateOffscreenPlainSurface(d3d->screen_width,
|
||||||
d3d->screen_height,
|
d3d->screen_height,
|
||||||
D3DFMT_X8R8G8B8, D3DPOOL_SYSTEMMEM,
|
D3DFMT_X8R8G8B8, D3DPOOL_SYSTEMMEM,
|
||||||
&dest, NULL)))
|
&dest, NULL)))
|
||||||
@ -621,7 +622,7 @@ static bool d3d_read_viewport(void *data, uint8_t *buffer)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAILED(d3d->d3d_err = d3d->dev->GetRenderTargetData(target, dest)))
|
if (FAILED(d3d->d3d_err = d3dr->GetRenderTargetData(target, dest)))
|
||||||
{
|
{
|
||||||
ret = false;
|
ret = false;
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -37,12 +37,9 @@ extern bool d3d_restore(void *data);
|
|||||||
|
|
||||||
static void d3d_resize(unsigned new_width, unsigned new_height)
|
static void d3d_resize(unsigned new_width, unsigned new_height)
|
||||||
{
|
{
|
||||||
#ifdef _XBOX
|
|
||||||
D3DVideo *d3d = reinterpret_cast<D3DVideo*>(driver.video_data);
|
|
||||||
#else
|
|
||||||
D3DVideo *d3d = reinterpret_cast<D3DVideo*>(curD3D);
|
D3DVideo *d3d = reinterpret_cast<D3DVideo*>(curD3D);
|
||||||
#endif
|
LPDIRECT3DDEVICE d3dr = d3d->dev;
|
||||||
if (!d3d->dev)
|
if (!d3dr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
RARCH_LOG("[D3D]: Resize %ux%u.\n", new_width, new_height);
|
RARCH_LOG("[D3D]: Resize %ux%u.\n", new_width, new_height);
|
||||||
@ -106,7 +103,8 @@ bool d3d_process_shader(void *data)
|
|||||||
static void gfx_ctx_d3d_swap_buffers(void)
|
static void gfx_ctx_d3d_swap_buffers(void)
|
||||||
{
|
{
|
||||||
D3DVideo *d3d = reinterpret_cast<D3DVideo*>(driver.video_data);
|
D3DVideo *d3d = reinterpret_cast<D3DVideo*>(driver.video_data);
|
||||||
if (d3d->dev->Present(NULL, NULL, NULL, NULL) != D3D_OK)
|
LPDIRECT3DDEVICE d3dr = d3d->dev;
|
||||||
|
if (d3dr->Present(NULL, NULL, NULL, NULL) != D3D_OK)
|
||||||
{
|
{
|
||||||
d3d->needs_restore = true;
|
d3d->needs_restore = true;
|
||||||
RARCH_ERR("[D3D]: Present() failed.\n");
|
RARCH_ERR("[D3D]: Present() failed.\n");
|
||||||
@ -319,6 +317,7 @@ bool d3d_init_multipass(void *data)
|
|||||||
bool d3d_init_chain(void *data, const video_info_t *video_info)
|
bool d3d_init_chain(void *data, const video_info_t *video_info)
|
||||||
{
|
{
|
||||||
D3DVideo *d3d = reinterpret_cast<D3DVideo*>(data);
|
D3DVideo *d3d = reinterpret_cast<D3DVideo*>(data);
|
||||||
|
LPDIRECT3DDEVICE d3dr = d3d->dev;
|
||||||
// Setup information for first pass.
|
// Setup information for first pass.
|
||||||
LinkInfo link_info = {0};
|
LinkInfo link_info = {0};
|
||||||
|
|
||||||
@ -328,7 +327,7 @@ bool d3d_init_chain(void *data, const video_info_t *video_info)
|
|||||||
delete d3d->chain;
|
delete d3d->chain;
|
||||||
d3d->chain = new RenderChain(
|
d3d->chain = new RenderChain(
|
||||||
&d3d->video_info,
|
&d3d->video_info,
|
||||||
d3d->dev, d3d->cgCtx,
|
d3dr, d3d->cgCtx,
|
||||||
d3d->final_viewport);
|
d3d->final_viewport);
|
||||||
|
|
||||||
if (!d3d->chain->init(link_info,
|
if (!d3d->chain->init(link_info,
|
||||||
|
@ -88,6 +88,7 @@ void RenderChain::set_final_viewport(const D3DVIEWPORT& final_viewport)
|
|||||||
|
|
||||||
bool RenderChain::set_pass_size(unsigned pass_index, unsigned width, unsigned height)
|
bool RenderChain::set_pass_size(unsigned pass_index, unsigned width, unsigned height)
|
||||||
{
|
{
|
||||||
|
LPDIRECT3DDEVICE d3dr = dev;
|
||||||
Pass &pass = passes[pass_index];
|
Pass &pass = passes[pass_index];
|
||||||
if (width != pass.info.tex_w || height != pass.info.tex_h)
|
if (width != pass.info.tex_w || height != pass.info.tex_h)
|
||||||
{
|
{
|
||||||
@ -95,17 +96,17 @@ bool RenderChain::set_pass_size(unsigned pass_index, unsigned width, unsigned he
|
|||||||
pass.info.tex_w = width;
|
pass.info.tex_w = width;
|
||||||
pass.info.tex_h = height;
|
pass.info.tex_h = height;
|
||||||
|
|
||||||
if (FAILED(dev->CreateTexture(width, height, 1,
|
if (FAILED(d3dr->CreateTexture(width, height, 1,
|
||||||
D3DUSAGE_RENDERTARGET,
|
D3DUSAGE_RENDERTARGET,
|
||||||
passes.back().info.pass->fbo.fp_fbo ? D3DFMT_A32B32G32R32F : D3DFMT_A8R8G8B8,
|
passes.back().info.pass->fbo.fp_fbo ? D3DFMT_A32B32G32R32F : D3DFMT_A8R8G8B8,
|
||||||
D3DPOOL_DEFAULT,
|
D3DPOOL_DEFAULT,
|
||||||
&pass.tex, NULL)))
|
&pass.tex, NULL)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
dev->SetTexture(0, pass.tex);
|
d3dr->SetTexture(0, pass.tex);
|
||||||
dev->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
|
d3dr->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
|
||||||
dev->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);
|
d3dr->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);
|
||||||
dev->SetTexture(0, NULL);
|
d3dr->SetTexture(0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -113,6 +114,7 @@ bool RenderChain::set_pass_size(unsigned pass_index, unsigned width, unsigned he
|
|||||||
|
|
||||||
bool RenderChain::add_pass(const LinkInfo &info)
|
bool RenderChain::add_pass(const LinkInfo &info)
|
||||||
{
|
{
|
||||||
|
LPDIRECT3DDEVICE d3dr = dev;
|
||||||
Pass pass;
|
Pass pass;
|
||||||
pass.info = info;
|
pass.info = info;
|
||||||
pass.last_width = 0;
|
pass.last_width = 0;
|
||||||
@ -122,26 +124,26 @@ bool RenderChain::add_pass(const LinkInfo &info)
|
|||||||
if (!init_shader_fvf(pass))
|
if (!init_shader_fvf(pass))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (FAILED(dev->CreateVertexBuffer(
|
if (FAILED(d3dr->CreateVertexBuffer(
|
||||||
4 * sizeof(Vertex),
|
4 * sizeof(Vertex),
|
||||||
dev->GetSoftwareVertexProcessing() ? D3DUSAGE_SOFTWAREPROCESSING : 0,
|
d3dr->GetSoftwareVertexProcessing() ? D3DUSAGE_SOFTWAREPROCESSING : 0,
|
||||||
0,
|
0,
|
||||||
D3DPOOL_DEFAULT,
|
D3DPOOL_DEFAULT,
|
||||||
&pass.vertex_buf,
|
&pass.vertex_buf,
|
||||||
NULL)))
|
NULL)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (FAILED(dev->CreateTexture(info.tex_w, info.tex_h, 1,
|
if (FAILED(d3dr->CreateTexture(info.tex_w, info.tex_h, 1,
|
||||||
D3DUSAGE_RENDERTARGET,
|
D3DUSAGE_RENDERTARGET,
|
||||||
passes.back().info.pass->fbo.fp_fbo ? D3DFMT_A32B32G32R32F : D3DFMT_A8R8G8B8,
|
passes.back().info.pass->fbo.fp_fbo ? D3DFMT_A32B32G32R32F : D3DFMT_A8R8G8B8,
|
||||||
D3DPOOL_DEFAULT,
|
D3DPOOL_DEFAULT,
|
||||||
&pass.tex, NULL)))
|
&pass.tex, NULL)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
dev->SetTexture(0, pass.tex);
|
d3dr->SetTexture(0, pass.tex);
|
||||||
dev->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
|
d3dr->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
|
||||||
dev->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);
|
d3dr->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);
|
||||||
dev->SetTexture(0, NULL);
|
d3dr->SetTexture(0, NULL);
|
||||||
|
|
||||||
passes.push_back(pass);
|
passes.push_back(pass);
|
||||||
|
|
||||||
@ -154,11 +156,12 @@ bool RenderChain::add_lut(const std::string &id,
|
|||||||
bool smooth)
|
bool smooth)
|
||||||
{
|
{
|
||||||
LPDIRECT3DTEXTURE lut;
|
LPDIRECT3DTEXTURE lut;
|
||||||
|
LPDIRECT3DDEVICE d3dr = dev;
|
||||||
|
|
||||||
RARCH_LOG("[D3D]: Loading LUT texture: %s.\n", path.c_str());
|
RARCH_LOG("[D3D]: Loading LUT texture: %s.\n", path.c_str());
|
||||||
|
|
||||||
if (FAILED(D3DXCreateTextureFromFileExA(
|
if (FAILED(D3DXCreateTextureFromFileExA(
|
||||||
dev,
|
d3dr,
|
||||||
path.c_str(),
|
path.c_str(),
|
||||||
D3DX_DEFAULT_NONPOW2,
|
D3DX_DEFAULT_NONPOW2,
|
||||||
D3DX_DEFAULT_NONPOW2,
|
D3DX_DEFAULT_NONPOW2,
|
||||||
@ -174,10 +177,10 @@ bool RenderChain::add_lut(const std::string &id,
|
|||||||
&lut)))
|
&lut)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
dev->SetTexture(0, lut);
|
d3dr->SetTexture(0, lut);
|
||||||
dev->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
|
d3dr->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
|
||||||
dev->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);
|
d3dr->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);
|
||||||
dev->SetTexture(0, NULL);
|
d3dr->SetTexture(0, NULL);
|
||||||
|
|
||||||
lut_info info = { lut, id, smooth };
|
lut_info info = { lut, id, smooth };
|
||||||
luts.push_back(info);
|
luts.push_back(info);
|
||||||
@ -209,6 +212,7 @@ void RenderChain::end_render(void)
|
|||||||
bool RenderChain::render(const void *data,
|
bool RenderChain::render(const void *data,
|
||||||
unsigned width, unsigned height, unsigned pitch, unsigned rotation)
|
unsigned width, unsigned height, unsigned pitch, unsigned rotation)
|
||||||
{
|
{
|
||||||
|
LPDIRECT3DDEVICE d3dr = dev;
|
||||||
start_render();
|
start_render();
|
||||||
|
|
||||||
unsigned current_width = width, current_height = height;
|
unsigned current_width = width, current_height = height;
|
||||||
@ -220,7 +224,7 @@ bool RenderChain::render(const void *data,
|
|||||||
|
|
||||||
// Grab back buffer.
|
// Grab back buffer.
|
||||||
LPDIRECT3DSURFACE back_buffer;
|
LPDIRECT3DSURFACE back_buffer;
|
||||||
dev->GetRenderTarget(0, &back_buffer);
|
d3dr->GetRenderTarget(0, &back_buffer);
|
||||||
|
|
||||||
// In-between render target passes.
|
// In-between render target passes.
|
||||||
for (unsigned i = 0; i < passes.size() - 1; i++)
|
for (unsigned i = 0; i < passes.size() - 1; i++)
|
||||||
@ -230,7 +234,7 @@ bool RenderChain::render(const void *data,
|
|||||||
|
|
||||||
LPDIRECT3DSURFACE target;
|
LPDIRECT3DSURFACE target;
|
||||||
to_pass.tex->GetSurfaceLevel(0, &target);
|
to_pass.tex->GetSurfaceLevel(0, &target);
|
||||||
dev->SetRenderTarget(0, target);
|
d3dr->SetRenderTarget(0, target);
|
||||||
|
|
||||||
convert_geometry(from_pass.info,
|
convert_geometry(from_pass.info,
|
||||||
out_width, out_height,
|
out_width, out_height,
|
||||||
@ -242,8 +246,8 @@ bool RenderChain::render(const void *data,
|
|||||||
viewport.Height = to_pass.info.tex_h;
|
viewport.Height = to_pass.info.tex_h;
|
||||||
viewport.MinZ = 0.0f;
|
viewport.MinZ = 0.0f;
|
||||||
viewport.MaxZ = 1.0f;
|
viewport.MaxZ = 1.0f;
|
||||||
dev->SetViewport(&viewport);
|
d3dr->SetViewport(&viewport);
|
||||||
dev->Clear(0, 0, D3DCLEAR_TARGET, 0, 1, 0);
|
d3dr->Clear(0, 0, D3DCLEAR_TARGET, 0, 1, 0);
|
||||||
|
|
||||||
viewport.Width = out_width;
|
viewport.Width = out_width;
|
||||||
viewport.Height = out_height;
|
viewport.Height = out_height;
|
||||||
@ -262,7 +266,7 @@ bool RenderChain::render(const void *data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Final pass
|
// Final pass
|
||||||
dev->SetRenderTarget(0, back_buffer);
|
d3dr->SetRenderTarget(0, back_buffer);
|
||||||
Pass &last_pass = passes.back();
|
Pass &last_pass = passes.back();
|
||||||
|
|
||||||
convert_geometry(last_pass.info,
|
convert_geometry(last_pass.info,
|
||||||
@ -303,8 +307,9 @@ bool RenderChain::create_first_pass(const LinkInfo &info, PixelFormat fmt)
|
|||||||
{
|
{
|
||||||
D3DXMATRIX ident;
|
D3DXMATRIX ident;
|
||||||
D3DXMatrixIdentity(&ident);
|
D3DXMatrixIdentity(&ident);
|
||||||
dev->SetTransform(D3DTS_WORLD, &ident);
|
LPDIRECT3DDEVICE d3dr = dev;
|
||||||
dev->SetTransform(D3DTS_VIEW, &ident);
|
d3dr->SetTransform(D3DTS_WORLD, &ident);
|
||||||
|
d3dr->SetTransform(D3DTS_VIEW, &ident);
|
||||||
|
|
||||||
Pass pass;
|
Pass pass;
|
||||||
pass.info = info;
|
pass.info = info;
|
||||||
@ -317,9 +322,9 @@ bool RenderChain::create_first_pass(const LinkInfo &info, PixelFormat fmt)
|
|||||||
prev.last_width[i] = 0;
|
prev.last_width[i] = 0;
|
||||||
prev.last_height[i] = 0;
|
prev.last_height[i] = 0;
|
||||||
|
|
||||||
if (FAILED(dev->CreateVertexBuffer(
|
if (FAILED(d3dr->CreateVertexBuffer(
|
||||||
4 * sizeof(Vertex),
|
4 * sizeof(Vertex),
|
||||||
dev->GetSoftwareVertexProcessing() ? D3DUSAGE_SOFTWAREPROCESSING : 0,
|
d3dr->GetSoftwareVertexProcessing() ? D3DUSAGE_SOFTWAREPROCESSING : 0,
|
||||||
0,
|
0,
|
||||||
D3DPOOL_DEFAULT,
|
D3DPOOL_DEFAULT,
|
||||||
&prev.vertex_buf[i],
|
&prev.vertex_buf[i],
|
||||||
@ -328,7 +333,7 @@ bool RenderChain::create_first_pass(const LinkInfo &info, PixelFormat fmt)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAILED(dev->CreateTexture(info.tex_w, info.tex_h, 1, 0,
|
if (FAILED(d3dr->CreateTexture(info.tex_w, info.tex_h, 1, 0,
|
||||||
fmt == RGB565 ? D3DFMT_R5G6B5 : D3DFMT_X8R8G8B8,
|
fmt == RGB565 ? D3DFMT_R5G6B5 : D3DFMT_X8R8G8B8,
|
||||||
D3DPOOL_MANAGED,
|
D3DPOOL_MANAGED,
|
||||||
&prev.tex[i], NULL)))
|
&prev.tex[i], NULL)))
|
||||||
@ -336,14 +341,14 @@ bool RenderChain::create_first_pass(const LinkInfo &info, PixelFormat fmt)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev->SetTexture(0, prev.tex[i]);
|
d3dr->SetTexture(0, prev.tex[i]);
|
||||||
dev->SetSamplerState(0, D3DSAMP_MINFILTER,
|
d3dr->SetSamplerState(0, D3DSAMP_MINFILTER,
|
||||||
translate_filter(info.pass->filter));
|
translate_filter(info.pass->filter));
|
||||||
dev->SetSamplerState(0, D3DSAMP_MAGFILTER,
|
d3dr->SetSamplerState(0, D3DSAMP_MAGFILTER,
|
||||||
translate_filter(info.pass->filter));
|
translate_filter(info.pass->filter));
|
||||||
dev->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
|
d3dr->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
|
||||||
dev->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);
|
d3dr->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);
|
||||||
dev->SetTexture(0, NULL);
|
d3dr->SetTexture(0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
compile_shaders(pass.fPrg, pass.vPrg, info.pass->source.cg);
|
compile_shaders(pass.fPrg, pass.vPrg, info.pass->source.cg);
|
||||||
@ -424,7 +429,8 @@ void RenderChain::set_vertices(Pass &pass,
|
|||||||
|
|
||||||
void RenderChain::set_viewport(const D3DVIEWPORT &vp)
|
void RenderChain::set_viewport(const D3DVIEWPORT &vp)
|
||||||
{
|
{
|
||||||
dev->SetViewport(&vp);
|
LPDIRECT3DDEVICE d3dr = dev;
|
||||||
|
d3dr->SetViewport(&vp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderChain::set_mvp(CGprogram &vPrg,
|
void RenderChain::set_mvp(CGprogram &vPrg,
|
||||||
@ -515,16 +521,17 @@ void RenderChain::blit_to_texture(const void *frame,
|
|||||||
|
|
||||||
void RenderChain::render_pass(Pass &pass, unsigned pass_index)
|
void RenderChain::render_pass(Pass &pass, unsigned pass_index)
|
||||||
{
|
{
|
||||||
|
LPDIRECT3DDEVICE d3dr = dev;
|
||||||
set_shaders(pass.fPrg, pass.vPrg);
|
set_shaders(pass.fPrg, pass.vPrg);
|
||||||
dev->SetTexture(0, pass.tex);
|
d3dr->SetTexture(0, pass.tex);
|
||||||
dev->SetSamplerState(0, D3DSAMP_MINFILTER,
|
d3dr->SetSamplerState(0, D3DSAMP_MINFILTER,
|
||||||
translate_filter(pass.info.pass->filter));
|
translate_filter(pass.info.pass->filter));
|
||||||
dev->SetSamplerState(0, D3DSAMP_MAGFILTER,
|
d3dr->SetSamplerState(0, D3DSAMP_MAGFILTER,
|
||||||
translate_filter(pass.info.pass->filter));
|
translate_filter(pass.info.pass->filter));
|
||||||
|
|
||||||
dev->SetVertexDeclaration(pass.vertex_decl);
|
d3dr->SetVertexDeclaration(pass.vertex_decl);
|
||||||
for (unsigned i = 0; i < 4; i++)
|
for (unsigned i = 0; i < 4; i++)
|
||||||
dev->SetStreamSource(i, pass.vertex_buf, 0, sizeof(Vertex));
|
d3dr->SetStreamSource(i, pass.vertex_buf, 0, sizeof(Vertex));
|
||||||
|
|
||||||
bind_orig(pass);
|
bind_orig(pass);
|
||||||
bind_prev(pass);
|
bind_prev(pass);
|
||||||
@ -532,17 +539,17 @@ void RenderChain::render_pass(Pass &pass, unsigned pass_index)
|
|||||||
bind_luts(pass);
|
bind_luts(pass);
|
||||||
bind_tracker(pass, pass_index);
|
bind_tracker(pass, pass_index);
|
||||||
|
|
||||||
if (SUCCEEDED(dev->BeginScene()))
|
if (SUCCEEDED(d3dr->BeginScene()))
|
||||||
{
|
{
|
||||||
dev->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
|
d3dr->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
|
||||||
dev->EndScene();
|
d3dr->EndScene();
|
||||||
}
|
}
|
||||||
|
|
||||||
// So we don't render with linear filter into render targets,
|
// So we don't render with linear filter into render targets,
|
||||||
// which apparently looked odd (too blurry).
|
// which apparently looked odd (too blurry).
|
||||||
dev->SetSamplerState(0, D3DSAMP_MINFILTER,
|
d3dr->SetSamplerState(0, D3DSAMP_MINFILTER,
|
||||||
D3DTEXF_POINT);
|
D3DTEXF_POINT);
|
||||||
dev->SetSamplerState(0, D3DSAMP_MAGFILTER,
|
d3dr->SetSamplerState(0, D3DSAMP_MAGFILTER,
|
||||||
D3DTEXF_POINT);
|
D3DTEXF_POINT);
|
||||||
|
|
||||||
unbind_all();
|
unbind_all();
|
||||||
@ -591,19 +598,20 @@ void RenderChain::log_info(const LinkInfo &info)
|
|||||||
|
|
||||||
void RenderChain::unbind_all()
|
void RenderChain::unbind_all()
|
||||||
{
|
{
|
||||||
|
LPDIRECT3DDEVICE d3dr = dev;
|
||||||
// Have to be a bit anal about it.
|
// Have to be a bit anal about it.
|
||||||
// Render targets hate it when they have filters apparently.
|
// Render targets hate it when they have filters apparently.
|
||||||
for (unsigned i = 0; i < bound_tex.size(); i++)
|
for (unsigned i = 0; i < bound_tex.size(); i++)
|
||||||
{
|
{
|
||||||
dev->SetSamplerState(bound_tex[i], D3DSAMP_MAGFILTER,
|
d3dr->SetSamplerState(bound_tex[i], D3DSAMP_MAGFILTER,
|
||||||
D3DTEXF_POINT);
|
D3DTEXF_POINT);
|
||||||
dev->SetSamplerState(bound_tex[i], D3DSAMP_MINFILTER,
|
d3dr->SetSamplerState(bound_tex[i], D3DSAMP_MINFILTER,
|
||||||
D3DTEXF_POINT);
|
D3DTEXF_POINT);
|
||||||
dev->SetTexture(bound_tex[i], NULL);
|
d3dr->SetTexture(bound_tex[i], NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (unsigned i = 0; i < bound_vert.size(); i++)
|
for (unsigned i = 0; i < bound_vert.size(); i++)
|
||||||
dev->SetStreamSource(bound_vert[i], 0, 0, 0);
|
d3dr->SetStreamSource(bound_vert[i], 0, 0, 0);
|
||||||
|
|
||||||
bound_tex.clear();
|
bound_tex.clear();
|
||||||
bound_vert.clear();
|
bound_vert.clear();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user