(D3D) Create d3d_vertex_buffer_free/d3d_texture_new/d3d_texture_free

This commit is contained in:
twinaphex 2014-09-13 18:11:15 +02:00
parent 138541f6cc
commit 0b5a9a244c
3 changed files with 53 additions and 14 deletions

View File

@ -40,6 +40,33 @@ void d3d_swap(void *data, LPDIRECT3DDEVICE dev)
#endif
}
LPDIRECT3DTEXTURE d3d_texture_new(LPDIRECT3DDEVICE dev,
const char *path, unsigned width, unsigned height,
unsigned miplevels, unsigned usage, D3DFORMAT format,
D3DPOOL pool, unsigned filter, unsigned mipfilter,
D3DCOLOR color_key, D3DXIMAGE_INFO *src_info,
PALETTEENTRY *palette)
{
HRESULT hr;
LPDIRECT3DTEXTURE buf;
hr = D3DXCreateTextureFromFileExA(dev,
path, width, height, miplevels, usage, format,
pool, filter, mipfilter, color_key, src_info,
palette, &buf);
if (FAILED(hr))
return NULL;
return buf;
}
void d3d_texture_free(LPDIRECT3DTEXTURE tex)
{
if (tex)
tex->Release();
}
LPDIRECT3DVERTEXBUFFER d3d_vertex_buffer_new(LPDIRECT3DDEVICE dev,
unsigned length, unsigned usage, unsigned fvf,
D3DPOOL pool, void *handle)
@ -63,6 +90,12 @@ LPDIRECT3DVERTEXBUFFER d3d_vertex_buffer_new(LPDIRECT3DDEVICE dev,
return buf;
}
void d3d_vertex_buffer_free(LPDIRECT3DVERTEXBUFFER buf)
{
if (buf)
buf->Release();
}
void d3d_set_stream_source(LPDIRECT3DDEVICE dev, unsigned stream_no,
LPDIRECT3DVERTEXBUFFER stream_vertbuf, unsigned offset_bytes,
unsigned stride)

View File

@ -26,10 +26,21 @@ LPDIRECT3DVERTEXBUFFER d3d_vertex_buffer_new(LPDIRECT3DDEVICE dev,
unsigned length, unsigned usage, unsigned fvf,
D3DPOOL pool, void *handle);
void d3d_vertex_buffer_free(LPDIRECT3DVERTEXBUFFER buf);
LPDIRECT3DTEXTURE d3d_texture_new(LPDIRECT3DDEVICE dev,
const char *path, unsigned width, unsigned height,
unsigned miplevels, unsigned usage, D3DFORMAT format,
D3DPOOL pool, unsigned filter, unsigned mipfilter,
D3DCOLOR color_key, D3DXIMAGE_INFO *src_info,
PALETTEENTRY *palette);
void d3d_set_stream_source(LPDIRECT3DDEVICE dev, unsigned stream_no,
LPDIRECT3DVERTEXBUFFER stream_vertbuf, unsigned offset_bytes,
unsigned stride);
void d3d_texture_free(LPDIRECT3DTEXTURE tex);
void d3d_set_sampler_address_u(LPDIRECT3DDEVICE dev,
unsigned sampler, unsigned value);

View File

@ -23,17 +23,15 @@ bool texture_image_load(struct texture_image *out_img, const char *path)
D3DXIMAGE_INFO m_imageInfo;
out_img->pixels = NULL;
out_img->vertex_buf = NULL;
if (FAILED(D3DXCreateTextureFromFileExA(d3d->dev,
path, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_A8R8G8B8,
D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0, &m_imageInfo, NULL,
&out_img->pixels)))
{
RARCH_ERR("Error occurred during D3DXCreateTextureFromFileExA().\n");
out_img->pixels = d3d_texture_new(d3d->dev, path,
D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0,
D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, D3DX_DEFAULT,
D3DX_DEFAULT, 0, &m_imageInfo, NULL);
if (!out_img->pixels)
return false;
}
/* create a vertex buffer for the quad that will display the texture */
out_img->vertex_buf = (LPDIRECT3DVERTEXBUFFER)d3d_vertex_buffer_new(
@ -42,8 +40,7 @@ bool texture_image_load(struct texture_image *out_img, const char *path)
if (!out_img->vertex_buf)
{
RARCH_ERR("Error occurred during CreateVertexBuffer().\n");
out_img->pixels->Release();
d3d_texture_free(out_img->pixels);
return false;
}
@ -58,9 +55,7 @@ void texture_image_free(struct texture_image *img)
if (!img)
return;
if (img->vertex_buf)
img->vertex_buf->Release();
if (img->pixels)
img->pixels->Release();
d3d_vertex_buffer_free(img->vertex_buf);
d3d_texture_free(img->pixels);
memset(img, 0, sizeof(*img));
}