habe heute versucht per HLSL ein Dreicek mit drei unterschiedlich colorierten Vertices zu rendern. Dazu habe ich den Code erweitert, der ein Dreieck in einer bestimmten Farbe rendert. Irgendwie zeigt wird in der Ausgabe aber nun nichts angezeigt?? Ich habe schon alles Kontrolliert und angepasst, aber es wird einfach nichts angezeigt. Wäre toll wenn mal jeman über meinen Code schauen und mir Tipps geben könnte.
Code der Headerdatei:
Code: Alles auswählen
#pragma once
#include "SimpleTriangleRenderer.h"
struct ColoredVertex
{
D3DXVECTOR3 Pos;
D3DXCOLOR Color;
};
class ColoredTriangleRenderer : public SimpleTriangleRenderer
{
public:
ColoredTriangleRenderer(IUnknownHolder<ID3D10Device>& d3dDevice);
virtual ~ColoredTriangleRenderer();
void Init();
void Render();
};
Code: Alles auswählen
#include "ColoredTriangleRenderer.h"
LOG_USE();
ColoredTriangleRenderer::ColoredTriangleRenderer(IUnknownHolder<ID3D10Device> &d3dDevice)
: SimpleTriangleRenderer(d3dDevice)
{
}
ColoredTriangleRenderer::~ColoredTriangleRenderer()
{
}
void ColoredTriangleRenderer::Init()
{
BaseRenderer::Init();
// Compile effect file and check for errors
///////////////////////////////////
#ifdef _DEBUG
const UINT hslFlags = D3D10_SHADER_DEBUG;
#else
const UINT hslFlags = D3D10_SHADER_ENABLE_STRICTNESS;
#endif
ID3D10Blob* errors = NULL;
if (FAILED(D3DX10CreateEffectFromFile(L"../DX10Experience/Shader/ColoredShader.fx", NULL, NULL, "fx_4_0", hslFlags,
0, m_device, NULL, NULL, &m_defaultEffect, &errors, NULL)) || errors)
{
if (errors)
{
char* compileErrors = static_cast<char*>(errors->GetBufferPointer());
LOG_FATAL(compileErrors);
::OutputDebugStringA(compileErrors);
throw Exception("Unable to load and compile default shader file");
}
throw Exception("Unable to load shader file (file is missing or has errors)");
}
// Get reference to shader technique
///////////////////////////////////
m_defaultTechnique = m_defaultEffect->GetTechniqueByName("DefaultTechnique");
if (m_defaultTechnique == NULL)
throw Exception("Unable to get reference to the shaders technique");
// Create the layout of the structure
///////////////////////////////////
D3D10_INPUT_ELEMENT_DESC layout[] =
{
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0 },
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D10_APPEND_ALIGNED_ELEMENT, D3D10_INPUT_PER_VERTEX_DATA, 0 }
};
m_numElements = (sizeof(layout) / sizeof(layout[0]));
// Create the input layout itself
///////////////////////////////////
D3D10_PASS_DESC pd;
m_defaultTechnique->GetPassByIndex(0)->GetDesc(&pd);
if (FAILED(m_device->CreateInputLayout(layout, m_numElements,
pd.pIAInputSignature, pd.IAInputSignatureSize, &m_inputLayout)))
throw Exception("Unable to create the input layout");
// Set the nput layout
m_device->IASetInputLayout(m_inputLayout);
// Create the vertex buffer
///////////////////////////////////
ColoredVertex vertices[] =
{
{ D3DXVECTOR3(0.0f, 0.5f, 0.5f), D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f) },
{ D3DXVECTOR3(0.5f, -0.5f, 0.5f), D3DXCOLOR(0.0f, 1.0f, 0.0f, 1.0f) },
{ D3DXVECTOR3(-0.5f, -0.5f, 0.5f), D3DXCOLOR(0.0f, 0.0f, 1.0f, 1.0f) }
};
D3D10_BUFFER_DESC bd;
bd.Usage = D3D10_USAGE_DEFAULT;
bd.ByteWidth = (sizeof(ColoredVertex) * 3);
bd.BindFlags = D3D10_BIND_VERTEX_BUFFER;
bd.CPUAccessFlags = 0;
bd.MiscFlags = 0;
D3D10_SUBRESOURCE_DATA initData;
initData.pSysMem = vertices;
if(FAILED(m_device->CreateBuffer(&bd, &initData, &m_vertexBuffer)))
throw Exception("Unable to create vertex buffer");
}
void ColoredTriangleRenderer::Render()
{
BaseRenderer::Render();
// Set vertex buffer
UINT stride = sizeof(ColoredVertex);
UINT offset = 0;
m_device->IASetVertexBuffers(0, 1, &m_vertexBuffer, &stride, &offset);
m_device->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
D3D10_TECHNIQUE_DESC td;
m_defaultTechnique->GetDesc(&td);
for (UINT p = 0; p < td.Passes; ++p)
{
m_defaultTechnique->GetPassByIndex(p)->Apply(0);
m_device->Draw(3, 0);
}
}
Code: Alles auswählen
/* ColoredShader.fx */
struct VS_DATA
{
float4 position : POSITION;
float4 color : COLOR0;
};
VS_DATA DefaultVS(VS_DATA dataIn)
{
return dataIn;
}
float4 DefaultPS(VS_DATA dataIn) : SV_Target
{
return dataIn.color;
}
technique10 DefaultTechnique
{
pass Pass0
{
SetGeometryShader(NULL);
SetVertexShader(CompileShader(vs_4_0, DefaultVS()));
SetPixelShader(CompileShader(ps_4_0, DefaultPS()));
}
}
angezeigt?? Ich habe keinen Plan was ich da verkehrt mache.