Prism::Sprite::Sprite(const std::string& aFileName, const CU::Vector2<float>& aSpriteSize , const CU::Vector2<float>& aHotSpot) : mySize(aSpriteSize) , myHotspot(aHotSpot) , myTexture(nullptr) , myShaderView(nullptr) { myFileName = aFileName; myEffect = Engine::GetInstance()->GetEffectContainer()->GetEffect("Data/Resource/Shader/S_effect_sprite.fx"); myEffect->AddListener(this); D3D11_INPUT_ELEMENT_DESC vertexDesc[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, }; InitInputLayout(vertexDesc, ARRAYSIZE(vertexDesc), "Sprite::InputLayout"); InitVertexBuffer(sizeof(VertexPosUV), D3D11_USAGE_IMMUTABLE, 0); InitIndexBuffer(); InitSurface("DiffuseTexture", myFileName); InitBlendState("Sprite::BlendState"); ZeroMemory(myInitData, sizeof(myInitData)); CreateVertices(); }
void Model::Init() { if (myIsNULLObject == false) { const int size = myVertexFormat.Size(); D3D11_INPUT_ELEMENT_DESC* vertexDesc = new D3D11_INPUT_ELEMENT_DESC[size]; for (int i = 0; i < myVertexFormat.Size(); ++i) { vertexDesc[i] = *myVertexFormat[i]; } D3DX11_PASS_DESC passDesc; HRESULT hr = S_OK; hr = myEffect->GetTechnique()->GetPassByIndex(0)->GetDesc(&passDesc); hr = Engine::GetInstance()->GetDevice()->CreateInputLayout(vertexDesc, size, passDesc.pIAInputSignature, passDesc.IAInputSignatureSize, &myVertexLayout); Engine::GetInstance()->GetContex()->IASetInputLayout(myVertexLayout); InitVertexBuffer(); InitIndexBuffer(); } for (int i = 0; i < myChilds.Size(); ++i) { myChilds[i]->Init(); } }
Terrain::Terrain(const std::string& aHeightMapPath, const std::string& aTexturePath , const CU::Vector2<float>& aSize, float aHeight, const CU::Matrix44<float>& aOrientation) : myHeightMap(HeightMapFactory::Create(aHeightMapPath.c_str())) , mySize(aSize) , myHeight(aHeight) , myOrientation(aOrientation) , myVertexFormat(4) { myFileName = aTexturePath; myEffect = Engine::GetInstance()->GetEffectContainer()->GetEffect("Data/Resource/Shader/S_effect_skybox.fx"); D3D11_INPUT_ELEMENT_DESC vertexDesc[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0 }, }; InitInputLayout(vertexDesc, ARRAYSIZE(vertexDesc), "Terrain::InputLayout"); InitVertexBuffer(sizeof(VertexPosNormUV), D3D11_USAGE_IMMUTABLE, 0); InitIndexBuffer(); InitSurface("DiffuseTexture", myFileName); InitBlendState("Terrain::BlendState"); ZeroMemory(myInitData, sizeof(myInitData)); CreateVertices(); }
Prism::Text::Text(const Font& aFont) : myFont(aFont) , myColor(1.f, 1.f, 1.f, 1.f) { //from debugText myEffect = Engine::GetInstance()->GetEffectContainer()->GetEffect("Data/Resource/Shader/S_effect_font.fx"); //myFont = aFont; //myCharSize = myFont->GetCharSize(); //myCharSpacing = 17.f; myScale = { 1.f, 1.f }; D3D11_INPUT_ELEMENT_DESC vertexDesc[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, }; InitInputLayout(vertexDesc, ARRAYSIZE(vertexDesc), "Text::InputLayout"); InitVertexBuffer(sizeof(VertexPosUV), D3D11_USAGE_DYNAMIC, D3D11_CPU_ACCESS_WRITE); InitIndexBuffer(); InitSurface("DiffuseTexture", myFont.GetTexture()->GetFileName()); InitBlendState("Text::BlendState"); ZeroMemory(myInitData, sizeof(myInitData)); myVertices.Init(1024); myIndices.Init(1024); }
void Cube::Init(D3DXVECTOR3& top_left_front_point) { InitVertexBuffer(top_left_front_point); InitIndexBuffer(); InitCornerPoints(top_left_front_point); UpdateCenter(); }
void Tile::TriangulateZOrder(void) { InitIndexBuffer(); int i = 0; TriangulateZOrder0(0, 0, size_-1, size_-1, i); if (num_lod_ > 0) { for (int dir = 0; dir < 4; ++dir) { children_[dir]->TriangulateZOrder(); } } }
void GPUData::Init(EffectID aEffect, GPUContext& aGPUContext, AssetContainer& aAssetContainer) { InitInputLayout(aEffect, aGPUContext, aAssetContainer); InitVertexBuffer(myVertexData->myStride, D3D11_USAGE_IMMUTABLE, 0); InitIndexBuffer(); SetupVertexBuffer(myVertexData->myNumberOfVertices, myVertexData->myVertexData, aGPUContext); SetupIndexBuffer(myIndexData->myNumberOfIndices, myIndexData->myIndexData, aGPUContext); myTechniqueName = "Render"; }
void GPUData::Init(EffectID aEffect, int aIndexCount, char* aIndexData , int aVertexCount, int aVertexStride, char* aVertexData, GPUContext& aGPUContext, AssetContainer& aAssetContainer) { InitInputLayout(aEffect, aGPUContext, aAssetContainer); InitVertexBuffer(aVertexStride, D3D11_USAGE_IMMUTABLE, 0); InitIndexBuffer(); SetupIndexBuffer(aIndexCount, aIndexData, aGPUContext); SetupVertexBuffer(aVertexCount, aVertexData, aGPUContext); myTechniqueName = "Render"; }
void GPUData::InitWithoutBufferSetup(EffectID aEffect, int aVertexStride, GPUContext& aGPUContext, AssetContainer& aAssetContainer) { InitInputLayout(aEffect, aGPUContext, aAssetContainer); InitVertexBuffer(aVertexStride, D3D11_USAGE_IMMUTABLE, 0); InitIndexBuffer(); myIndexData = new IndexData(); myVertexData = new VertexData(); SetTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); myTechniqueName = "Render"; }
Prism::Sprite::Sprite(ID3D11Texture2D* aTexture, const CU::Vector2<float>& aSpriteSize , const CU::Vector2<float>& aHotSpot) : mySize(aSpriteSize) , myHotspot(aHotSpot) , myTexture(nullptr) , myShaderView(nullptr) { myFileName = "Inited from ID3D11Texture"; myEffect = Engine::GetInstance()->GetEffectContainer()->GetEffect("Data/Resource/Shader/S_effect_sprite.fx"); myEffect->AddListener(this); D3D11_INPUT_ELEMENT_DESC vertexDesc[] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, }; D3D11_TEXTURE2D_DESC desc; aTexture->GetDesc(&desc); desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; HRESULT hr = Engine::GetInstance()->GetDevice()->CreateTexture2D(&desc, NULL, &myTexture); if (FAILED(hr)) { DL_ASSERT("Failed to CreateTexture2D"); } Engine::GetInstance()->SetDebugName(myTexture, "Sprite::myTexture"); hr = Engine::GetInstance()->GetDevice()->CreateShaderResourceView(myTexture, NULL, &myShaderView); if (FAILED(hr)) { DL_ASSERT("Failed to CopyFromD3DTexture"); } Engine::GetInstance()->SetDebugName(myShaderView, "Sprite::myShaderView"); CopyFromD3DTexture(aTexture); InitInputLayout(vertexDesc, ARRAYSIZE(vertexDesc), "Sprite::InputLayout"); InitVertexBuffer(sizeof(VertexPosUV), D3D11_USAGE_IMMUTABLE, 0); InitSurface("DiffuseTexture", myShaderView); InitIndexBuffer(); InitBlendState("Sprite::BlendState"); ZeroMemory(myInitData, sizeof(myInitData)); CreateVertices(); }
bool Model::InitBuffers(VertexType aVertexType) { myVertexBaseData = new VertexDataWrapper(); myVertexBaseData->myNumberOfVertices = myVertices.Size(); myVertexBaseData->myStride = 0; myVertexBaseData->myType = aVertexType; switch (aVertexType) { case VertexType::POS_COLOR: myVertexBaseData->mySize = sizeof(VertexPosColor); break; case VertexType::POS_UV: myVertexBaseData->mySize = sizeof(VertexPosUV); break; case VertexType::POS_COLOR_UV: myVertexBaseData->mySize = sizeof(VertexPosColorUV); break; case VertexType::POS_NORM_UV: myVertexBaseData->mySize = sizeof(VertexPosNormUV); break; default: DL_ASSERT("[Model]: Invalid input to InitBuffers"); break; } myVertexBaseData->mySize *= myVertexBaseData->myNumberOfVertices; myVertexBaseData->myVertexData = reinterpret_cast<char*>(&myVertices[0]); myIndexBaseData = new VertexIndexWrapper(); myIndexBaseData->myFormat = DXGI_FORMAT_R32_UINT; myIndexBaseData->myIndexData = reinterpret_cast<char*>(&myVerticeIndices[0]); myIndexBaseData->myNumberOfIndices = myVerticeIndices.Size(); myIndexBaseData->mySize = sizeof(UINT) * myIndexBaseData->myNumberOfIndices; if (InitVertexBuffer() == false) return false; if (InitIndexBuffer() == false) return false; return true; }
void Tile::TriangulateLines(void) { InitIndexBuffer(); // Dreieck 1 links oben, Dreieck 2 rechts unten int i = 0; for (int y = 0; y < size_ - 1; y++) { for (int x = 0; x < size_ - 1; x++) { index_buffer_[i++] = I(x, y); // 1. Dreieck links oben index_buffer_[i++] = I(x+1, y); // 1. Dreieck rechts oben index_buffer_[i++] = I(x, y+1); // 1. Dreieck links unten index_buffer_[i++] = I(x+1, y); // 2. Dreieck rechts oben index_buffer_[i++] = I(x+1, y+1); // 2. Dreieck rechts unten index_buffer_[i++] = I(x, y+1); // 2. Dreieck links unten } } if (num_lod_ > 0) { for (int dir = 0; dir < 4; ++dir) { children_[dir]->TriangulateLines(); } } }
void GPUData::Init(EffectID aEffect, int aIndexCount, char* aIndexData, int aVertexCount, int aVertexStride, char* aVertexData) { const int size = myVertexFormat.Size(); D3D11_INPUT_ELEMENT_DESC* vertexDesc = new D3D11_INPUT_ELEMENT_DESC[size]; for (int i = 0; i < myVertexFormat.Size(); ++i) { vertexDesc[i] = *myVertexFormat[i]; } InitInputLayout(vertexDesc, size, aEffect); delete[] vertexDesc; InitVertexBuffer(aVertexStride, D3D11_USAGE_IMMUTABLE, 0); InitIndexBuffer(); SetupVertexBuffer(aVertexCount, aVertexData); SetupIndexBuffer(aIndexCount, aIndexData); myTechniqueName = "Render"; }
void GPUData::Init(EffectID aEffect) { const int size = myVertexFormat.Size(); D3D11_INPUT_ELEMENT_DESC* vertexDesc = new D3D11_INPUT_ELEMENT_DESC[size]; for (int i = 0; i < myVertexFormat.Size(); ++i) { vertexDesc[i] = *myVertexFormat[i]; } InitInputLayout(vertexDesc, size, aEffect); delete[] vertexDesc; InitVertexBuffer(myVertexData->myStride, D3D11_USAGE_IMMUTABLE, 0); InitIndexBuffer(); SetupVertexBuffer(myVertexData->myNumberOfVertices, myVertexData->myVertexData); SetupIndexBuffer(myIndexData->myNumberOfIndices, myIndexData->myIndexData); myTechniqueName = "Render"; }
HRESULT Application::InitDevice() { HRESULT hr = S_OK; UINT createDeviceFlags = 0; #ifdef _DEBUG createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; #endif D3D_DRIVER_TYPE driverTypes[] = { D3D_DRIVER_TYPE_HARDWARE, D3D_DRIVER_TYPE_WARP, D3D_DRIVER_TYPE_REFERENCE, }; UINT numDriverTypes = ARRAYSIZE(driverTypes); D3D_FEATURE_LEVEL featureLevels[] = { D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0, }; UINT numFeatureLevels = ARRAYSIZE(featureLevels); UINT sampleCount = 4; DXGI_SWAP_CHAIN_DESC sd; ZeroMemory(&sd, sizeof(sd)); sd.BufferCount = 1; sd.BufferDesc.Width = _renderWidth; sd.BufferDesc.Height = _renderHeight; sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; sd.BufferDesc.RefreshRate.Numerator = 60; sd.BufferDesc.RefreshRate.Denominator = 1; sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; sd.OutputWindow = _hWnd; sd.SampleDesc.Count = sampleCount; sd.SampleDesc.Quality = 0; sd.Windowed = TRUE; for (UINT driverTypeIndex = 0; driverTypeIndex < numDriverTypes; driverTypeIndex++) { _driverType = driverTypes[driverTypeIndex]; hr = D3D11CreateDeviceAndSwapChain(nullptr, _driverType, nullptr, createDeviceFlags, featureLevels, numFeatureLevels, D3D11_SDK_VERSION, &sd, &_pSwapChain, &_pd3dDevice, &_featureLevel, &_pImmediateContext); if (SUCCEEDED(hr)) break; } if (FAILED(hr)) return hr; // Create a render target view ID3D11Texture2D* pBackBuffer = nullptr; hr = _pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&pBackBuffer); if (FAILED(hr)) return hr; hr = _pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, &_pRenderTargetView); pBackBuffer->Release(); if (FAILED(hr)) return hr; // Setup the viewport D3D11_VIEWPORT vp; vp.Width = (FLOAT)_renderWidth; vp.Height = (FLOAT)_renderHeight; vp.MinDepth = 0.0f; vp.MaxDepth = 1.0f; vp.TopLeftX = 0; vp.TopLeftY = 0; _pImmediateContext->RSSetViewports(1, &vp); InitShadersAndInputLayout(); InitVertexBuffer(); InitIndexBuffer(); // Set primitive topology _pImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); // Create the constant buffer D3D11_BUFFER_DESC bd; ZeroMemory(&bd, sizeof(bd)); bd.Usage = D3D11_USAGE_DEFAULT; bd.ByteWidth = sizeof(ConstantBuffer); bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER; bd.CPUAccessFlags = 0; hr = _pd3dDevice->CreateBuffer(&bd, nullptr, &_pConstantBuffer); if (FAILED(hr)) return hr; D3D11_TEXTURE2D_DESC depthStencilDesc; depthStencilDesc.Width = _renderWidth; depthStencilDesc.Height = _renderHeight; depthStencilDesc.MipLevels = 1; depthStencilDesc.ArraySize = 1; depthStencilDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; depthStencilDesc.SampleDesc.Count = sampleCount; depthStencilDesc.SampleDesc.Quality = 0; depthStencilDesc.Usage = D3D11_USAGE_DEFAULT; depthStencilDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; depthStencilDesc.CPUAccessFlags = 0; depthStencilDesc.MiscFlags = 0; _pd3dDevice->CreateTexture2D(&depthStencilDesc, nullptr, &_depthStencilBuffer); _pd3dDevice->CreateDepthStencilView(_depthStencilBuffer, nullptr, &_depthStencilView); _pImmediateContext->OMSetRenderTargets(1, &_pRenderTargetView, _depthStencilView); // Rasterizer D3D11_RASTERIZER_DESC cmdesc; ZeroMemory(&cmdesc, sizeof(D3D11_RASTERIZER_DESC)); cmdesc.FillMode = D3D11_FILL_SOLID; cmdesc.CullMode = D3D11_CULL_NONE; hr = _pd3dDevice->CreateRasterizerState(&cmdesc, &RSCullNone); D3D11_DEPTH_STENCIL_DESC dssDesc; ZeroMemory(&dssDesc, sizeof(D3D11_DEPTH_STENCIL_DESC)); dssDesc.DepthEnable = true; dssDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL; dssDesc.DepthFunc = D3D11_COMPARISON_LESS_EQUAL; _pd3dDevice->CreateDepthStencilState(&dssDesc, &DSLessEqual); ZeroMemory(&cmdesc, sizeof(D3D11_RASTERIZER_DESC)); cmdesc.FillMode = D3D11_FILL_SOLID; cmdesc.CullMode = D3D11_CULL_BACK; cmdesc.FrontCounterClockwise = true; hr = _pd3dDevice->CreateRasterizerState(&cmdesc, &CCWcullMode); cmdesc.FrontCounterClockwise = false; hr = _pd3dDevice->CreateRasterizerState(&cmdesc, &CWcullMode); return S_OK; }
HRESULT Application::InitDevice() { HRESULT hr = S_OK; UINT createDeviceFlags = 0; #ifdef _DEBUG createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; #endif D3D_DRIVER_TYPE driverTypes[] = { D3D_DRIVER_TYPE_HARDWARE, D3D_DRIVER_TYPE_WARP, D3D_DRIVER_TYPE_REFERENCE, }; UINT numDriverTypes = ARRAYSIZE(driverTypes); D3D_FEATURE_LEVEL featureLevels[] = { D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0, }; UINT numFeatureLevels = ARRAYSIZE(featureLevels); DXGI_SWAP_CHAIN_DESC sd; ZeroMemory(&sd, sizeof(sd)); sd.BufferCount = 1; sd.BufferDesc.Width = _WindowWidth; sd.BufferDesc.Height = _WindowHeight; sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; sd.BufferDesc.RefreshRate.Numerator = 60; sd.BufferDesc.RefreshRate.Denominator = 1; sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; sd.OutputWindow = _hWnd; sd.SampleDesc.Count = 1; sd.SampleDesc.Quality = 0; sd.Windowed = TRUE; for (UINT driverTypeIndex = 0; driverTypeIndex < numDriverTypes; driverTypeIndex++) { _driverType = driverTypes[driverTypeIndex]; hr = D3D11CreateDeviceAndSwapChain(nullptr, _driverType, nullptr, createDeviceFlags, featureLevels, numFeatureLevels, D3D11_SDK_VERSION, &sd, &_pSwapChain, &_pd3dDevice, &_featureLevel, &_pImmediateContext); if (SUCCEEDED(hr)) break; } if (FAILED(hr)) return hr; // Create a render target view ID3D11Texture2D* pBackBuffer = nullptr; hr = _pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&pBackBuffer); if (FAILED(hr)) return hr; hr = _pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, &_pRenderTargetView); pBackBuffer->Release(); if (FAILED(hr)) return hr; D3D11_TEXTURE2D_DESC depthStencilDesc; depthStencilDesc.Width = _WindowWidth; depthStencilDesc.Height = _WindowHeight; depthStencilDesc.MipLevels = 1; depthStencilDesc.ArraySize = 1; depthStencilDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; depthStencilDesc.SampleDesc.Count = 1; depthStencilDesc.SampleDesc.Quality = 0; depthStencilDesc.Usage = D3D11_USAGE_DEFAULT; depthStencilDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; depthStencilDesc.CPUAccessFlags = 0; depthStencilDesc.MiscFlags = 0; _pd3dDevice->CreateTexture2D(&depthStencilDesc, nullptr, &_depthStencilBuffer); _pd3dDevice->CreateDepthStencilView(_depthStencilBuffer, nullptr, &_depthStencilView); _pImmediateContext->OMSetRenderTargets(1, &_pRenderTargetView, _depthStencilView); // Setup the viewport D3D11_VIEWPORT vp; vp.Width = (FLOAT)_WindowWidth; vp.Height = (FLOAT)_WindowHeight; vp.MinDepth = 0.0f; vp.MaxDepth = 1.0f; vp.TopLeftX = 0; vp.TopLeftY = 0; _pImmediateContext->RSSetViewports(1, &vp); InitShadersAndInputLayout(); //Set the vertex buffers InitVertexBuffer(); InitGridVertexBuffer(); // Set the index buffers InitIndexBuffer(); InitGridIndexBuffer(); // Set primitive topology _pImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); // Create the constant buffer D3D11_BUFFER_DESC bd; ZeroMemory(&bd, sizeof(bd)); bd.Usage = D3D11_USAGE_DEFAULT; bd.ByteWidth = sizeof(ConstantBuffer); bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER; bd.CPUAccessFlags = 0; hr = _pd3dDevice->CreateBuffer(&bd, nullptr, &_pConstantBuffer); if (FAILED(hr)) return hr; // Creates the wireframe Rasterizer Desc D3D11_RASTERIZER_DESC wfdesc; ZeroMemory(&wfdesc, sizeof(D3D11_RASTERIZER_DESC)); wfdesc.FillMode = D3D11_FILL_WIREFRAME; wfdesc.CullMode = D3D11_CULL_NONE; hr = _pd3dDevice->CreateRasterizerState(&wfdesc, &_wireFrame); //Creates the solid fill Rasterizer desc D3D11_RASTERIZER_DESC wfdesc2; ZeroMemory(&wfdesc2, sizeof(D3D11_RASTERIZER_DESC)); wfdesc2.FillMode = D3D11_FILL_SOLID; wfdesc2.CullMode = D3D11_CULL_BACK; hr = _pd3dDevice->CreateRasterizerState(&wfdesc2, &_solidFill); D3D11_SAMPLER_DESC sampDesc; ZeroMemory(&sampDesc, sizeof(sampDesc)); sampDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; sampDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; sampDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; sampDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; sampDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; sampDesc.MinLOD = 0; sampDesc.MaxLOD = D3D11_FLOAT32_MAX; _pd3dDevice->CreateSamplerState(&sampDesc, &_pSamplerLinear); //Loads the textures for objects CreateDDSTextureFromFile(_pd3dDevice, L"textures/Crate_COLOR.dds", nullptr, &_pTextureRV); CreateDDSTextureFromFile(_pd3dDevice, L"textures/Pine Tree.dds", nullptr, &_pTreeTextureRV); CreateDDSTextureFromFile(_pd3dDevice, L"textures/grass.dds", nullptr, &_grassTextureRV); CreateDDSTextureFromFile(_pd3dDevice, L"textures/Hercules_COLOR.dds", nullptr, &_planeTextureRV); CreateDDSTextureFromFile(_pd3dDevice, L"textures/ocean.dds", nullptr, &_oceanTextureRV); CreateDDSTextureFromFile(_pd3dDevice, L"textures/sky.dds", nullptr, &_skyTextureRV); CreateDDSTextureFromFile(_pd3dDevice, L"textures/brick.dds", nullptr, &_buildingTextureRV); D3D11_BLEND_DESC blendDesc; ZeroMemory(&blendDesc, sizeof(blendDesc)); D3D11_RENDER_TARGET_BLEND_DESC rtbd; ZeroMemory(&rtbd, sizeof(rtbd)); rtbd.BlendEnable = true; rtbd.SrcBlend = D3D11_BLEND_SRC_COLOR; rtbd.DestBlend = D3D11_BLEND_BLEND_FACTOR; rtbd.BlendOp = D3D11_BLEND_OP_ADD; rtbd.SrcBlendAlpha = D3D11_BLEND_ONE; rtbd.DestBlendAlpha = D3D11_BLEND_ZERO; rtbd.BlendOpAlpha = D3D11_BLEND_OP_ADD; rtbd.RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; blendDesc.AlphaToCoverageEnable = false; blendDesc.RenderTarget[0] = rtbd; _pd3dDevice->CreateBlendState(&blendDesc, &Transparency); return S_OK; }
Cube3D::Cube3D() : myWireFrame(false) , mySize(1.f, 1.f, 1.f) , myColor(1.f, 1.f, 1.f, 1.f) { myEffect = EffectContainer::GetInstance()->GetEffect("Data/Resource/Shader/S_effect_cube3d.fx"); CreateVertexBuffer(1.f); myIndexBaseData = new VertexIndexWrapper(); myIndexBaseData->myFormat = DXGI_FORMAT_R32_UINT; myIndexBaseData->myNumberOfIndices = 6 * 6; myIndexBaseData->mySize = myIndexBaseData->myNumberOfIndices * sizeof(unsigned int); CU::GrowingArray<int> indices; indices.Init(32); indices.Add(3); indices.Add(1); indices.Add(0); indices.Add(2); indices.Add(1); indices.Add(3); indices.Add(6); indices.Add(4); indices.Add(5); indices.Add(6); indices.Add(7); indices.Add(4); indices.Add(11); indices.Add(9); indices.Add(8); indices.Add(10); indices.Add(9); indices.Add(11); indices.Add(14); indices.Add(12); indices.Add(13); indices.Add(15); indices.Add(12); indices.Add(14); indices.Add(19); indices.Add(17); indices.Add(16); indices.Add(18); indices.Add(17); indices.Add(19); indices.Add(22); indices.Add(20); indices.Add(21); indices.Add(23); indices.Add(20); indices.Add(22); myIndexBaseData->myIndexData = new char[myIndexBaseData->mySize](); memcpy(myIndexBaseData->myIndexData, &indices[0], indices.Size() * sizeof(unsigned int)); myPrimitiveTopology = D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST; InitVertexBuffer(); InitIndexBuffer(); }