本文整理汇总了C++中IDirect3DTexture9::AddRef方法的典型用法代码示例。如果您正苦于以下问题:C++ IDirect3DTexture9::AddRef方法的具体用法?C++ IDirect3DTexture9::AddRef怎么用?C++ IDirect3DTexture9::AddRef使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IDirect3DTexture9
的用法示例。
在下文中一共展示了IDirect3DTexture9::AddRef方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setTexture
void MGEhud::setTexture(hud_id hud, const char *texture)
{
Element *e = &elements[hud];
if(e->texture)
e->texture->Release();
IDirect3DTexture9 *tex = BSALoadTexture(device, texture);
if(tex)
{
D3DSURFACE_DESC desc;
tex->GetLevelDesc(0, &desc);
e->w = desc.Width;
e->h = desc.Height;
e->texture = tex;
// As the BSA cache cannot reload a texture after it is released, (it returns a pointer to the released texture)
// we have to add a loose reference to keep the texture in memory and avoid a crash
tex->AddRef();
e->textureFilename = texture;
}
else
{
LOG::logline("LoadHUDTexture : Cannot load texture %s", texture);
e->texture = 0;
e->textureFilename.clear();
}
}
示例2: if
// Presents a video frame.
HRESULT D3DPresentEngine::PresentSample(IMFSample* pSample, LONGLONG llTarget)
{
HRESULT hr = S_OK;
IMFMediaBuffer* pBuffer = NULL;
IDirect3DTexture9* pTexture = NULL;
if (pSample)
{
// Get the buffer from the sample.
hr = pSample->GetBufferByIndex(0, &pBuffer);
if (SUCCEEDED(hr))
{
// Get the surface from the buffer.
IDirect3DSurface9* pSurface = NULL;
hr = MFGetService(pBuffer, MR_BUFFER_SERVICE, __uuidof(IDirect3DSurface9), (void**)&pSurface);
if (SUCCEEDED(hr))
{
// Get the texture from the buffer.
pSurface->GetContainer(IID_IDirect3DTexture9, (void**)&pTexture);
}
}
if (hr == D3DERR_DEVICELOST || hr == D3DERR_DEVICENOTRESET || hr == D3DERR_DEVICEHUNG)
{
// We failed because the device was lost.
// This case is ignored. The Reset(Ex) method must be called from the thread that created the device.
// The presenter will detect the state when it calls CheckDeviceState() on the next sample.
hr = S_OK;
}
}
else if (m_pTextureRepaint)
{
// Redraw from the last surface.
pTexture = m_pTextureRepaint;
pTexture->AddRef();
}
hr = m_EVRCallback->PresentSurface(m_Width, m_Height, m_ArX, m_ArY, (DWORD)&pTexture); // Return reference, so C# side can modify the pointer after Dispose() to avoid duplicated releasing.
SAFE_RELEASE(pTexture);
SAFE_RELEASE(pBuffer);
return hr;
}
示例3: swap
bool Surface::swap()
{
if (mSwapChain)
{
IDirect3DTexture9 *flipTexture = mFlipTexture;
flipTexture->AddRef();
IDirect3DSurface9 *renderTarget = mRenderTarget;
renderTarget->AddRef();
EGLint oldWidth = mWidth;
EGLint oldHeight = mHeight;
checkForWindowResize();
IDirect3DDevice9 *device = mDisplay->getDevice();
IDirect3DSurface9 *textureSurface;
flipTexture->GetSurfaceLevel(0, &textureSurface);
mDisplay->endScene();
device->StretchRect(renderTarget, NULL, textureSurface, NULL, D3DTEXF_NONE);
renderTarget->Release();
applyFlipState(device);
device->SetTexture(0, flipTexture);
float xscale = (float)mWidth / oldWidth;
float yscale = (float)mHeight / oldHeight;
// Render the texture upside down into the back buffer
// Texcoords are chosen to pin a potentially resized image into the upper-left corner without scaling.
float quad[4][6] = {{ 0 - 0.5f, 0 - 0.5f, 0.0f, 1.0f, 0.0f, 1.0f },
{mWidth - 0.5f, 0 - 0.5f, 0.0f, 1.0f, xscale, 1.0f },
{mWidth - 0.5f, mHeight - 0.5f, 0.0f, 1.0f, xscale, 1.0f-yscale},
{ 0 - 0.5f, mHeight - 0.5f, 0.0f, 1.0f, 0.0f, 1.0f-yscale}}; // x, y, z, rhw, u, v
mDisplay->startScene();
device->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, quad, 6 * sizeof(float));
flipTexture->Release();
textureSurface->Release();
restoreState(device);
mDisplay->endScene();
HRESULT result = mSwapChain->Present(NULL, NULL, NULL, NULL, mDisplay->getPresentInterval());
if (result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY || result == D3DERR_DRIVERINTERNALERROR)
{
return error(EGL_BAD_ALLOC, false);
}
if (result == D3DERR_DEVICELOST)
{
return error(EGL_CONTEXT_LOST, false);
}
ASSERT(SUCCEEDED(result));
}
return true;
}