1#ifndef MYTHRENDER_D3D9_H
2#define MYTHRENDER_D3D9_H
6#include "libmythbase/mythconfig.h"
32 bool IsValid(
void)
const {
return m_valid; }
33 QSize
GetSize(
void)
const {
return m_size; }
34 int GetDataSize(
void)
const {
return m_size.width() * m_size.height() * 4; }
35 bool SetAsRenderTarget(
void);
36 bool UpdateImage(IDirect3DSurface9 *surface);
38 bool UpdateVertices(
const QRect &dvr,
const QRect &vr,
int alpha = 255,
41 uint8_t* GetBuffer(
bool &hardware_conv,
uint &pitch);
42 void ReleaseBuffer(
void);
49 IDirect3DVertexBuffer9 *m_vertexbuffer {
nullptr};
50 IDirect3DTexture9 *m_texture {
nullptr};
51 IDirect3DSurface9 *m_surface {
nullptr};
60 IDirect3DDevice9* Acquire(
void);
69 m_dest(QRect(QPoint(0,0),QSize(0,0))),
95 static void* ResolveAddress(
const char* lib,
const char* proc);
99 bool Create(QSize size, HWND window);
100 bool Test(
bool &reset);
102 bool ClearBuffer(
void);
105 void CopyFrame(
void* surface,
D3D9Image *img);
106 bool StretchRect(IDirect3DTexture9 *texture, IDirect3DSurface9 *surface,
107 bool known_surface =
true);
108 bool DrawTexturedQuad(IDirect3DVertexBuffer9 *vertexbuffer);
109 void DrawRect(
const QRect &rect,
const QColor &color,
int alpha);
110 bool Present(HWND win);
111 bool HardwareYUVConversion(
void);
112 QRect GetRect(IDirect3DVertexBuffer9 *vertexbuffer);
113 bool SetRenderTarget(IDirect3DTexture9 *texture);
115 IDirect3DTexture9* CreateTexture(
const QSize &size);
116 void DeleteTexture(IDirect3DTexture9* texture);
118 IDirect3DVertexBuffer9* CreateVertexBuffer(IDirect3DTexture9* texture =
nullptr);
119 bool UpdateVertexBuffer(IDirect3DVertexBuffer9* vertexbuffer,
120 const QRect &dvr,
const QRect &vr,
121 int alpha = 255,
bool video =
false);
122 void DeleteVertexBuffer(IDirect3DVertexBuffer9* vertexbuffer);
124 IDirect3DSurface9* CreateSurface(
const QSize &size,
bool video =
false);
125 bool UpdateSurface(IDirect3DSurface9* surface,
127 void DeleteSurface(IDirect3DSurface9* surface);
128 uint8_t* GetBuffer(IDirect3DSurface9* surface,
uint &pitch);
129 void ReleaseBuffer(IDirect3DSurface9* surface);
133 bool SetTexture(IDirect3DDevice9* dev,
134 IDirect3DTexture9 *texture,
136 void DeleteTextures(
void);
137 void DeleteVertexBuffers(
void);
138 void DeleteSurfaces(
void);
139 void Init2DState(
void);
140 void EnableBlending(IDirect3DDevice9* dev,
bool enable);
141 void MultiTexturing(IDirect3DDevice9* dev,
bool enable,
142 IDirect3DTexture9 *texture =
nullptr);
143 void SetTextureVertices(IDirect3DDevice9* dev,
bool enable);
150 IDirect3D9 *m_d3d {
nullptr};
151 IDirect3DDevice9 *m_rootD3DDevice {
nullptr};
152 D3DFORMAT m_adaptor_fmt {D3DFMT_UNKNOWN};
153 D3DFORMAT m_videosurface_fmt {D3DFMT_UNKNOWN};
154 D3DFORMAT m_surface_fmt {D3DFMT_UNKNOWN};
155 D3DFORMAT m_texture_fmt {D3DFMT_UNKNOWN};
156 IDirect3DVertexBuffer9 *m_rect_vertexbuffer {
nullptr};
157 IDirect3DSurface9 *m_default_surface {
nullptr};
158 IDirect3DSurface9 *m_current_surface {
nullptr};
162 bool m_multi_texturing {
true};
163 bool m_texture_vertices {
true};
166 IDirect3DDevice9* AcquireDevice(
void);
167 void ReleaseDevice(
void);
171 void CreateDeviceManager(
void);
172 void DestroyDeviceManager(
void);
176 HANDLE m_deviceHandle {
nullptr};
int GetDataSize(void) const
QSize GetSize(void) const
D3D9Locker(MythRenderD3D9 *render)
MythD3DSurface(QSize size=QSize(0, 0), D3DFORMAT fmt=D3DFMT_UNKNOWN)
IDirect3DTexture9 * m_texture
MythD3DVertexBuffer(IDirect3DTexture9 *tex=nullptr)
QMap< IDirect3DSurface9 *, MythD3DSurface > m_surfaces
QMap< IDirect3DTexture9 *, QSize > m_textures
QMap< IDirect3DVertexBuffer9 *, MythD3DVertexBuffer > m_vertexbuffers
IDirect3DDeviceManager9 * GetDeviceManager(void)
void * IDirect3DDeviceManager9