Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
/// @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;
}