TextureStorage9_Cube::TextureStorage9_Cube(Renderer *renderer, GLenum internalformat, bool renderTarget, int size, int levels) : TextureStorage9(renderer, GetTextureUsage(internalformat, Renderer9::makeRenderer9(renderer), renderTarget)) { mTexture = NULL; for (int i = 0; i < 6; ++i) { mRenderTarget[i] = NULL; } // if the size is not positive this should be treated as an incomplete texture // we handle that here by skipping the d3d texture creation if (size > 0) { IDirect3DDevice9 *device = mRenderer->getDevice(); int height = size; D3DFORMAT format = gl_d3d9::GetTextureFormat(internalformat, mRenderer); d3d9::MakeValidSize(false, format, &size, &height, &mTopLevel); UINT creationLevels = (levels == 0) ? 0 : mTopLevel + levels; HRESULT result = device->CreateCubeTexture(size, creationLevels, getUsage(), format, getPool(), &mTexture, NULL); if (FAILED(result)) { ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY); gl::error(GL_OUT_OF_MEMORY); } } initializeRenderTarget(); }
TextureStorage9_Cube::TextureStorage9_Cube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size) : TextureStorage9(renderer, GetTextureUsage(Renderer9::makeRenderer9(renderer)->ConvertTextureInternalFormat(internalformat), usage, forceRenderable)) { mTexture = NULL; for (int i = 0; i < 6; ++i) { mRenderTarget[i] = NULL; } // if the size is not positive this should be treated as an incomplete texture // we handle that here by skipping the d3d texture creation if (size > 0) { IDirect3DDevice9 *device = mRenderer->getDevice(); int height = size; gl::MakeValidSize(false, gl::IsCompressed(internalformat), &size, &height, &mLodOffset); HRESULT result = device->CreateCubeTexture(size, levels ? levels + mLodOffset : 0, getUsage(), mRenderer->ConvertTextureInternalFormat(internalformat), getPool(), &mTexture, NULL); if (FAILED(result)) { ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY); gl::error(GL_OUT_OF_MEMORY); } } initializeRenderTarget(); }
TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels) : TextureStorage9(renderer, GetTextureUsage(internalformat, renderTarget)) { mTexture = NULL; mRenderTarget = NULL; // if the width or height is not positive this should be treated as an incomplete texture // we handle that here by skipping the d3d texture creation if (width > 0 && height > 0) { IDirect3DDevice9 *device = mRenderer->getDevice(); const d3d9::TextureFormat &d3dFormatInfo = d3d9::GetTextureFormatInfo(internalformat); d3d9::MakeValidSize(false, d3dFormatInfo.texFormat, &width, &height, &mTopLevel); UINT creationLevels = (levels == 0) ? 0 : mTopLevel + levels; HRESULT result = device->CreateTexture(width, height, creationLevels, getUsage(), d3dFormatInfo.texFormat, getPool(), &mTexture, NULL); if (FAILED(result)) { ASSERT(result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY); gl::error(GL_OUT_OF_MEMORY); } } initializeRenderTarget(); }
TextureStorage9_2D::TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain) : TextureStorage9(renderer, D3DUSAGE_RENDERTARGET) { IDirect3DTexture9 *surfaceTexture = swapchain->getOffscreenTexture(); mTexture = surfaceTexture; mRenderTarget = NULL; initializeRenderTarget(); }
bool DXManager::Initialize( int screenWidth, int screenHeight, bool vsync, HWND HWnd, bool fullscreen, float screenDepth, float screenNear ) { HRESULT hr = S_OK; m_vsync_enabled = vsync; mHWnd = HWnd; m_ScreenWidth = screenWidth; m_ScreenHeight = screenHeight; m_ScreenNear = screenNear; m_ScreenDepth = screenDepth; hr = initializeDevice(fullscreen); if (FAILED(hr)) return false; hr = setupMatrix(); if (FAILED(hr)) return false; hr = getVideoCardInfo(); if (FAILED(hr)) return false; hr = initializeDepthBufferDesc(); if (FAILED(hr)) return false; hr = initializeDepthStencilDesc(); if (FAILED(hr)) return false; hr = initializeAlphaBlendStateDesc(); if (FAILED(hr)) return false; hr = initializeRenderTarget(); if (FAILED(hr)) return false; hr = initializeRasterState(); if (FAILED(hr)) return false; // Setta il viewport vp.Width = static_cast<float>(m_ScreenWidth); vp.Height = static_cast<float>(m_ScreenHeight); vp.MinDepth = 0.0f; vp.MaxDepth = 1.0f; vp.TopLeftX = 0; vp.TopLeftY = 0; mPd3dDeviceContext->RSSetViewports(1, &vp); return true; }