bool DynamicDrawer::BufferData< VertexType, Functions, DivisionCount, DivisionVertexCount, DivisionIndexCount >::Initialize() { Shutdown(); Renderer* pRenderer = Renderer::GetStaticInstance(); HELIUM_ASSERT( pRenderer ); size_t vertexBufferSize = DivisionVertexCount * DivisionCount * sizeof( VertexType ); m_spVertices = pRenderer->CreateVertexBuffer( vertexBufferSize, RENDERER_BUFFER_USAGE_DYNAMIC ); HELIUM_ASSERT( m_spVertices ); if( !m_spVertices ) { HELIUM_TRACE( TraceLevels::Error, ( TXT( "DynamicDrawer::BufferData::Initialize(): Failed to allocate vertex buffer of %" ) PRIuSZ TXT( " bytes.\n" ) ), vertexBufferSize ); Shutdown(); return false; } size_t indexBufferSize = DivisionIndexCount * DivisionCount * sizeof( uint16_t ); m_spIndices = pRenderer->CreateIndexBuffer( indexBufferSize, RENDERER_BUFFER_USAGE_DYNAMIC, RENDERER_INDEX_FORMAT_UINT16 ); HELIUM_ASSERT( m_spIndices ); if( !m_spIndices ) { HELIUM_TRACE( TraceLevels::Error, ( TXT( "DynamicDrawer::BufferData::Initialize(): Failed to allocate index buffer of %" ) PRIuSZ TXT( " bytes.\n" ) ), indexBufferSize ); Shutdown(); return false; } return true; }
int CALLBACK WinMain(HINSTANCE _hInstance, HINSTANCE _hPrevInstance, LPSTR _lpCmdLine, int _nCmdShow) { Window Window; Window.Initialize(_hInstance, _nCmdShow); Window.Create(Platform::Window::eWindow_Mode_Normal, L"FTL Engine", 0, 0, 1024, 768); RendererDLL rendererDLL; Renderer* pRenderer; rendererDLL.Create(&pRenderer); { Graphics::Renderer::Settings Settings; Settings.nWidth = 1024; Settings.nHeight = 768; Settings.nRefreshRate = 0; Settings.nMSAASamples = 1; Settings.nSampleQuality = 0; Settings.nBufferCount = 1; Settings.eDriverMode = Graphics::Renderer::eDriverMode_Hardware; Settings.hOutput = Window.GetHandle(); Settings.bDebugMode = true; pRenderer->Initialize(Settings); pRenderer->Startup(); { // Shaders Graphics::HShader VertexShader = pRenderer->CompileFromFile(L"Source/Shader.hlsl", "VShader", Graphics::Shader::eSHADER_TYPE_VERTEX); Graphics::HShader PixelShader = pRenderer->CompileFromFile(L"Source/Shader.hlsl", "PShader", Graphics::Shader::eSHADER_TYPE_PIXEL); // Vertex Format Graphics::VertexFormat::VertDataPair VertFormat[2] = { { Graphics::VertexFormat::eSEMANTICS_POSITION, Graphics::VertexFormat::eDATASIZES_FLOAT3}, { Graphics::VertexFormat::eSEMANTICS_COLOR, Graphics::VertexFormat::eDATASIZES_FLOAT4}, }; Graphics::HVertexFormat hVertexFormat = pRenderer->CreateVertexFormat(VertFormat, 2); // Vertex Buffer Vertex VertexBuffer[] = { { 0.00f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f}, { 0.45f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f}, {-0.45f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f}, }; Graphics::HVertexBuffer hVertexBuffer = pRenderer->CreateVertexBuffer(3, &VertexBuffer, hVertexFormat); // Index Buffer uint32 IntexBuffer[] = { 0, 1, 2, }; Graphics::HIndexBuffer hIndexBuffer = pRenderer->CreateIndexBuffer(3, IntexBuffer); // Activate Settings VertexShader->SetShaderActive(); PixelShader->SetShaderActive(); hVertexBuffer->SetBufferActive(); hIndexBuffer->SetBufferActive(); pRenderer->SetPrimitiveTopology(Graphics::Primitive::eTOPOLOGY_TRIANGLELIST); //while(Window.Update()) Window.Update(); { float Color[4] = {0.33f, 0.33f, 0.33f, 1.00f}; pRenderer->ClearBackBuffer(Color); pRenderer->Draw(3, 0, 0); pRenderer->Present(); } Window.Update(); } pRenderer->Shutdown(); } rendererDLL.Release(); return NULL; }
/// @copydoc Asset::BeginPrecacheResourceData() bool Mesh::BeginPrecacheResourceData() { HELIUM_ASSERT( IsInvalid( m_vertexBufferLoadId ) ); HELIUM_ASSERT( IsInvalid( m_indexBufferLoadId ) ); Renderer* pRenderer = Renderer::GetStaticInstance(); if( !pRenderer ) { return true; } if( m_persistentResourceData.m_vertexCount != 0 ) { size_t vertexDataSize = GetSubDataSize( 0 ); if( IsInvalid( vertexDataSize ) ) { HELIUM_TRACE( TraceLevels::Error, ( TXT( "Mesh::BeginPrecacheResourceData(): Failed to locate cached vertex buffer data for mesh " ) TXT( "\"%s\".\n" ) ), *GetPath().ToString() ); } else { m_spVertexBuffer = pRenderer->CreateVertexBuffer( vertexDataSize, RENDERER_BUFFER_USAGE_STATIC ); if( !m_spVertexBuffer ) { HELIUM_TRACE( TraceLevels::Error, ( TXT( "Mesh::BeginPrecacheResourceData(): Failed to create a vertex buffer of %" ) PRIuSZ TXT( " bytes for mesh \"%s\".\n" ) ), vertexDataSize, *GetPath().ToString() ); } else { void* pData = m_spVertexBuffer->Map(); if( !pData ) { HELIUM_TRACE( TraceLevels::Error, ( TXT( "Mesh::BeginPrecacheResourceData(): Failed to map vertex buffer for loading for " ) TXT( "mesh \"%s\".\n" ) ), *GetPath().ToString() ); m_spVertexBuffer.Release(); } else { m_vertexBufferLoadId = BeginLoadSubData( pData, 0 ); if( IsInvalid( m_vertexBufferLoadId ) ) { HELIUM_TRACE( TraceLevels::Error, ( TXT( "Mesh::BeginPrecacheResourceData(): Failed to queue async load request for " ) TXT( "vertex buffer data for mesh \"%s\".\n" ) ), *GetPath().ToString() ); m_spVertexBuffer->Unmap(); m_spVertexBuffer.Release(); } } } } } if( m_persistentResourceData.m_triangleCount != 0 ) { size_t indexDataSize = GetSubDataSize( 1 ); if( IsInvalid( indexDataSize ) ) { HELIUM_TRACE( TraceLevels::Error, ( TXT( "Mesh::BeginPrecacheResourceData(): Failed to locate cached index buffer data for mesh " ) TXT( "\"%s\".\n" ) ), *GetPath().ToString() ); } else { m_spIndexBuffer = pRenderer->CreateIndexBuffer( indexDataSize, RENDERER_BUFFER_USAGE_STATIC, RENDERER_INDEX_FORMAT_UINT16 ); if( !m_spIndexBuffer ) { HELIUM_TRACE( TraceLevels::Error, ( TXT( "Mesh::BeginPrecacheResourceData(): Failed to create an index buffer of %" ) PRIuSZ TXT( " bytes for mesh \"%s\".\n" ) ), indexDataSize, *GetPath().ToString() ); } else { void* pData = m_spIndexBuffer->Map(); if( !pData ) { HELIUM_TRACE( TraceLevels::Error, ( TXT( "Mesh::BeginPrecacheResourceData(): Failed to map index buffer for loading for " ) TXT( "mesh \"%s\".\n" ) ), *GetPath().ToString() ); m_spIndexBuffer.Release(); } else { m_indexBufferLoadId = BeginLoadSubData( pData, 1 ); if( IsInvalid( m_indexBufferLoadId ) ) { HELIUM_TRACE( TraceLevels::Error, ( TXT( "Mesh::BeginPrecacheResourceData(): Failed to queue async load request for " ) TXT( "index buffer data for mesh \"%s\".\n" ) ), *GetPath().ToString() ); m_spIndexBuffer->Unmap(); m_spIndexBuffer.Release(); } } } } } return true; }