LPDIRECT3DVERTEXBUFFER d3d_vertex_buffer_new(LPDIRECT3DDEVICE dev, unsigned length, unsigned usage, unsigned fvf, D3DPOOL pool, void *handle) { HRESULT hr; LPDIRECT3DVERTEXBUFFER buf; #ifndef _XBOX if (usage == 0) { if (dev->GetSoftwareVertexProcessing()) usage = D3DUSAGE_SOFTWAREPROCESSING; } #endif #if defined(HAVE_D3D8) hr = IDirect3DDevice8_CreateVertexBuffer(dev, length, usage, fvf, pool, &buf); #elif defined(HAVE_D3D9) hr = IDirect3DDevice9_CreateVertexBuffer(dev, length, usage, fvf, pool, &buf, NULL); #else hr = dev->CreateVertexBuffer(length, usage, fvf, pool, &buf, NULL); #endif if (FAILED(hr)) return NULL; return buf; }
LPDIRECT3DVERTEXBUFFER d3d_vertex_buffer_new(LPDIRECT3DDEVICE dev, unsigned length, unsigned usage, unsigned fvf, D3DPOOL pool, void *handle) { HRESULT hr; LPDIRECT3DVERTEXBUFFER buf; #if defined(HAVE_D3D8) hr = IDirect3DDevice8_CreateVertexBuffer(dev, length, usage, fvf, pool, &buf); #elif defined(HAVE_D3D9) hr = IDirect3DDevice9_CreateVertexBuffer(dev, length, usage, fvf, pool, &buf, NULL); #else hr = dev->CreateVertexBuffer(length, usage, fvf, pool, &buf, NULL); #endif if (FAILED(hr)) return NULL; return buf; }
HRESULT _gldCreatePrimitiveBuffer( struct gl_context *ctx, GLD_driver_dx8 *lpCtx, GLD_pb_dx8 *gldVB) { HRESULT hResult; char *szCreateVertexBufferFailed = "CreateVertexBuffer failed"; DWORD dwMaxVertices; // Max number of vertices in vertex buffer DWORD dwVBSize; // Total size of vertex buffer // If CVA (Compiled Vertex Array) is used by an OpenGL app, then we // will need enough vertices to cater for Mesa::Const.MaxArrayLockSize. // We'll use IMM_SIZE if it's larger (which it should not be). dwMaxVertices = MAX_ARRAY_LOCK_SIZE; // Now calculate how many vertices to allow for in total // 1 per point, 2 per line, 6 per quad = 9 dwVBSize = dwMaxVertices * 9 * gldVB->dwStride; hResult = IDirect3DDevice8_CreateVertexBuffer( lpCtx->pDev, dwVBSize, gldVB->dwUsage, gldVB->dwFVF, gldVB->dwPool, &gldVB->pVB); if (FAILED(hResult)) { ddlogMessage(DDLOG_CRITICAL_OR_WARN, szCreateVertexBufferFailed); return hResult; } gldVB->nLines = gldVB->nPoints = gldVB->nTriangles = 0; gldVB->pPoints = gldVB->pLines = gldVB->pTriangles = NULL; gldVB->iFirstLine = dwMaxVertices; // Index of first line in VB gldVB->iFirstTriangle = dwMaxVertices*3; // Index of first triangle in VB return S_OK; }
static HRESULT d3d_device_create_vertex_buffer(d3d_device *dev, UINT length, DWORD usage, DWORD fvf, D3DPOOL pool, d3d_vertex_buffer **buf) { IDirect3DDevice8 *device = (IDirect3DDevice8 *)dev; return IDirect3DDevice8_CreateVertexBuffer(device, length, usage, fvf, pool, (IDirect3DVertexBuffer8 **)buf); }