Commit aed9aece authored by Administrator's avatar Administrator
Browse files

Debug: box and triangle defined, but triangle does NOT display

If only define triangle, it can display.
Both box and triangle have same pixel shader constant buffer.
Suspect conflict of pixel shader constant buffer.
parent 2942ed94
......@@ -7,3 +7,5 @@ x64/
# Exclude cso files
*.cso
# Exclude log.txt
*/log.txt
#pragma once
#include "Graphics.h"
#include "Logger.h"
class Bindable
{
public:
virtual void Bind(Graphics& gfx) noexcept = 0;
virtual void Bind(Graphics& gfx, Logger& logger) noexcept = 0;
virtual ~Bindable() = default;
protected:
static ID3D11DeviceContext* GetContext(Graphics& gfx) noexcept;
......
#pragma once
#include "Box.h"
#include "Bindable.h"
#include "VertexBuffer.h"
#include "IndexBuffer.h"
#include "VertexShader.h"
#include "PixelShader.h"
#include "ConstantBuffer.h"
#include "InputLayout.h"
#include "Topology.h"
#include "TransformCBuf.h"
#include "Graphics.h"
Box::Box(Graphics& gfx, float position[][6], float r, float g, float b, Logger& logger)
:
r(r),
g(g),
b(b)
{
// Assign position values
/*for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
this->position[i][j] = position[i][j];
}
}*/
/************************************
* 2.3 DefineVertexBuffer
************************************/
const std::vector<StructBoxVertex> vertices =
{
// left bottom back
{ -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f },
// right bottom back
{ 1.0f, -1.0f, -1.0f, 0.0f, 1.0f, 0.0f },
// left top back
{ -1.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f },
// right top back
{ 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f },
// left bottom front
{ -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f },
// right bottom front
{ 1.0f, -1.0f, 1.0f, 0.0f, 1.0f, 1.0f },
// left top front
{ -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f },
// right top front
{ 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f },
};
AddBind(std::make_unique<VertexBuffer>(gfx, vertices, logger));
/*for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
logger.PutLog("Box::Box", std::to_string(this->position[i][j]));
}
}*/
/************************************
* 2.7 DefineVertexShader
************************************/
auto pVertexShader = std::make_unique<VertexShader>(gfx, L"VertexShader.cso");
auto pvsbc = pVertexShader->GetBytecode();
AddBind(std::move(pVertexShader));
/************************************
* 2.8 DefinePixelShader
************************************/
AddBind(std::make_unique<PixelShader>(gfx, L"PixelShader.cso"));
/************************************
* 2.4 DefineIndexBuffer
************************************/
const std::vector<unsigned short> indices =
{
0,2,1, 2,3,1,
1,3,5, 3,7,5,
2,6,3, 3,6,7,
4,5,7, 4,7,6,
0,4,2, 2,4,6,
0,1,4, 1,5,4
};
/*const std::vector<unsigned short> indices =
{
0,1,2, 0,2,1,
0,1,2, 0,2,1
};*/
AddIndexBuffer(std::make_unique<IndexBuffer>(gfx, indices, logger));
/************************************
* 2.6 DefineColorConstBuffer(PixelConstBuf)
************************************/
/*const StructPixelConstBuf cb2 =
{
{
{ 1.0f,0.0f,1.0f },
{ 1.0f,0.0f,0.0f },
{ 0.0f,1.0f,0.0f },
{ 0.0f,0.0f,1.0f },
{ 1.0f,1.0f,0.0f },
{ 0.0f,1.0f,1.0f },
}
};*/
const StructPixelConstBuf cb2 =
{
{
{ 1.0f,0.0f,1.0f },
{ 1.0f,0.0f,0.0f },
{ 0.0f,1.0f,0.0f },
{ 0.0f,0.0f,1.0f },
{ 1.0f,1.0f,0.0f },
{ 0.0f,1.0f,1.0f },
{ 1.0f,0.0f,1.0f },
{ 1.0f,0.0f,0.0f },
{ 0.0f,1.0f,0.0f },
{ 0.0f,0.0f,1.0f },
{ 1.0f,1.0f,0.0f },
{ 0.0f,1.0f,1.0f },
}
};
AddBind(std::make_unique<PixelConstantBuffer<StructPixelConstBuf>>(gfx, cb2));
/************************************
* 2.9 DefineInputLayout
************************************/
const std::vector<D3D11_INPUT_ELEMENT_DESC> ied =
{
{ "Position",0,DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_PER_VERTEX_DATA,0 },
};
AddBind(std::make_unique<InputLayout>(gfx, ied, pvsbc));
/************************************
* 2.10 DefinePrimitiveTopology
************************************/
AddBind(std::make_unique<Topology>(gfx, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST));
/************************************
* 2.5 DefineTransConstBuffer
************************************/
AddBind(std::make_unique<TransformCbuf>(gfx, *this));
}
/*
void Box::Update(float dt) noexcept
{
roll += droll * dt;
pitch += dpitch * dt;
yaw += dyaw * dt;
theta += dtheta * dt;
phi += dphi * dt;
chi += dchi * dt;
}
*/
DirectX::XMMATRIX Box::GetTransformXM() const noexcept
{
/*return DirectX::XMMatrixRotationRollPitchYaw(pitch, yaw, roll) *
DirectX::XMMatrixTranslation(r, 0.0f, 0.0f) *
DirectX::XMMatrixRotationRollPitchYaw(theta, phi, chi) *
DirectX::XMMatrixTranslation(0.0f, 0.0f, 20.0f);*/
return
DirectX::XMMatrixTranslation(0.0f, 0.0f, 4.0f);
}
\ No newline at end of file
#pragma once
#include "Drawable.h"
#include "Logger.h"
class Box : public Drawable
{
public:
Box(Graphics& gfx, float position[][6], float r, float g, float b, Logger& logger);
DirectX::XMMATRIX GetTransformXM() const noexcept override;
private:
// positional
float position[8][6];
// color
float r;
float g;
float b;
};
\ No newline at end of file
......@@ -52,7 +52,7 @@ class VertexConstantBuffer : public ConstantBuffer<C>
using Bindable::GetContext;
public:
using ConstantBuffer<C>::ConstantBuffer;
void Bind(Graphics& gfx) noexcept override
void Bind(Graphics& gfx, Logger& logger) noexcept override
{
GetContext(gfx)->VSSetConstantBuffers(0u, 1u, pConstantBuffer.GetAddressOf());
}
......@@ -65,8 +65,9 @@ class PixelConstantBuffer : public ConstantBuffer<C>
using Bindable::GetContext;
public:
using ConstantBuffer<C>::ConstantBuffer;
void Bind(Graphics& gfx) noexcept override
void Bind(Graphics& gfx, Logger& logger) noexcept override
{
GetContext(gfx)->PSSetConstantBuffers(0u, 1u, pConstantBuffer.GetAddressOf());
logger.PutLog("PixelConstantBuffer::Bind", "PSSetConstantBuffers");
}
};
\ No newline at end of file
......@@ -3,14 +3,22 @@
#include <cassert>
#include <typeinfo>
void Drawable::Draw(Graphics& gfx) const noexcept
void Drawable::Draw(Graphics& gfx, Logger& logger) const noexcept
{
/*for (auto& b : binds)
{
b->Bind(gfx, logger);
}*/
gfx.DrawIndexed(pIndexBuffer->GetCount());
};
void Drawable::ExecuteBind(Graphics& gfx, Logger& logger) noexcept
{
for (auto& b : binds)
{
b->Bind(gfx);
b->Bind(gfx, logger);
}
gfx.DrawIndexed(pIndexBuffer->GetCount());
}
};
void Drawable::AddBind(std::unique_ptr<Bindable> bind) noexcept
{
......
......@@ -5,6 +5,7 @@
#include <vector>
#include "Bindable.h"
#include "IndexBuffer.h"
#include "Logger.h"
class Bindable;
......@@ -14,11 +15,12 @@ public:
Drawable() = default;
Drawable(const Drawable&) = delete;
virtual DirectX::XMMATRIX GetTransformXM() const noexcept = 0;
void Draw(Graphics& gfx) const noexcept;
void Draw(Graphics& gfx, Logger& logger) const noexcept;
//virtual void Update(float dt) noexcept = 0;
void AddBind(std::unique_ptr<Bindable> bind) noexcept;
void AddIndexBuffer(std::unique_ptr<class IndexBuffer> ibuf) noexcept;
void ExecuteBind(Graphics& gfx, Logger& logger) noexcept;
virtual ~Drawable() = default;
private:
const IndexBuffer* pIndexBuffer = nullptr;
......
......@@ -170,3 +170,18 @@ void Graphics::DrawIndexed(UINT count) noexcept
{
pContext->DrawIndexed(count, 0u, 0u);
}
// for debug
wrl::ComPtr<ID3D11Device> Graphics::getDevice()
{
return pDevice;
};
wrl::ComPtr<IDXGISwapChain> Graphics::getSwapChain()
{
return pSwapChain;
};
wrl::ComPtr<ID3D11DeviceContext> Graphics::getContext()
{
return pContext;
};
\ No newline at end of file
......@@ -28,6 +28,11 @@ public:
void SetProjection(DirectX::FXMMATRIX proj) noexcept;
DirectX::XMMATRIX GetProjection() const noexcept;
// for debug
wrl::ComPtr<ID3D11Device> getDevice();
wrl::ComPtr<IDXGISwapChain> getSwapChain();
wrl::ComPtr<ID3D11DeviceContext> getContext();
private:
DirectX::XMMATRIX projection;
// 指向Device的指针
......
#include "IndexBuffer.h"
IndexBuffer::IndexBuffer(Graphics& gfx, const std::vector<unsigned short>& indices)
IndexBuffer::IndexBuffer(Graphics& gfx, const std::vector<unsigned short>& indices, Logger& logger)
:
count((UINT)indices.size())
{
......@@ -14,9 +14,13 @@ IndexBuffer::IndexBuffer(Graphics& gfx, const std::vector<unsigned short>& indic
D3D11_SUBRESOURCE_DATA isd = {};
isd.pSysMem = indices.data();
GetDevice(gfx)->CreateBuffer(&ibd, &isd, &pIndexBuffer);
logger.PutLog("IndexBuffer::IndexBuffer", "size of unsigned short: " + std::to_string(sizeof(unsigned short)));
logger.PutLog("IndexBuffer::IndexBuffer", "ByteWidth: " + std::to_string(ibd.ByteWidth));
logger.PutLog("IndexBuffer::IndexBuffer", "StructureByteStride: " + std::to_string(ibd.StructureByteStride));
}
void IndexBuffer::Bind(Graphics& gfx) noexcept
void IndexBuffer::Bind(Graphics& gfx, Logger& logger) noexcept
{
GetContext(gfx)->IASetIndexBuffer(pIndexBuffer.Get(), DXGI_FORMAT_R16_UINT, 0u);
}
......
......@@ -2,12 +2,13 @@
#include "Bindable.h"
#include <d3d11.h>
#include <vector>
#include "Logger.h"
class IndexBuffer : public Bindable
{
public:
IndexBuffer(Graphics& gfx, const std::vector<unsigned short>& indices);
void Bind(Graphics& gfx) noexcept override;
IndexBuffer(Graphics& gfx, const std::vector<unsigned short>& indices, Logger& logger);
void Bind(Graphics& gfx, Logger& logger) noexcept override;
UINT GetCount() const noexcept;
protected:
UINT count;
......
......@@ -12,7 +12,7 @@ InputLayout::InputLayout(Graphics& gfx,
);
}
void InputLayout::Bind(Graphics& gfx) noexcept
void InputLayout::Bind(Graphics& gfx, Logger& logger) noexcept
{
GetContext(gfx)->IASetInputLayout(pInputLayout.Get());
}
......@@ -8,7 +8,7 @@ public:
InputLayout(Graphics& gfx,
const std::vector<D3D11_INPUT_ELEMENT_DESC>& layout,
ID3DBlob* pVertexShaderBytecode);
void Bind(Graphics& gfx) noexcept override;
void Bind(Graphics& gfx, Logger& logger) noexcept override;
protected:
Microsoft::WRL::ComPtr<ID3D11InputLayout> pInputLayout;
};
\ No newline at end of file
#pragma once
#pragma warning(disable : 4996) //_CRT_SECURE_NO_WARNINGS
#include "Logger.h"
#include <iostream>
#include <fstream>
#include <chrono>
#include <ctime>
using namespace std;
Logger::Logger(std::string loggerFile)
{
this->loggerFile = loggerFile;
};
void Logger::start()
{
// ios::app - 追加
// ios::ate - 移动到文件末
// ios::out - 写(默认清空)
// ios::trunc - 清空
this->fs.open(this->loggerFile, ios::out | ios::app);
};
void Logger::PutLog(std::string module, std::string text)
{
// Get current system time
auto now = std::chrono::system_clock::now();
// Convert system time to time_t (seconds since Jan 1, 1970)
std::time_t now_time = std::chrono::system_clock::to_time_t(now);
// Convert time_t to struct tm (broken down time)
std::tm* now_tm = std::localtime(&now_time);
// Format timestamp string manually
char timestamp[20];
std::strftime(timestamp, sizeof(timestamp), "%Y-%m-%d %H:%M:%S", now_tm);
fs << "[" << timestamp << "]: " << "[" << module << "] " << text << endl;
};
void Logger::end()
{
fs.close();
};
\ No newline at end of file
#pragma once
#include <string>
#include <fstream>
class Logger
{
public:
Logger(std::string loggerFile);
// 单例设计模式,禁止复制
Logger(const Logger&) = delete;
Logger& operator=(const Logger&) = delete;
~Logger() = default;
void start();
void PutLog(std::string module, std::string text);
void end();
private:
std::string loggerFile;
std::fstream fs;
};
\ No newline at end of file
......@@ -10,7 +10,7 @@ PixelShader::PixelShader(Graphics& gfx, const std::wstring& path)
GetDevice(gfx)->CreatePixelShader(pBlob->GetBufferPointer(), pBlob->GetBufferSize(), nullptr, &pPixelShader);
}
void PixelShader::Bind(Graphics& gfx) noexcept
void PixelShader::Bind(Graphics& gfx, Logger& logger) noexcept
{
GetContext(gfx)->PSSetShader(pPixelShader.Get(), nullptr, 0u);
}
......@@ -6,7 +6,7 @@ class PixelShader : public Bindable
{
public:
PixelShader(Graphics& gfx, const std::wstring& path);
void Bind(Graphics& gfx) noexcept override;
void Bind(Graphics& gfx, Logger& logger) noexcept override;
protected:
Microsoft::WRL::ComPtr<ID3D11PixelShader> pPixelShader;
};
\ No newline at end of file
......@@ -7,5 +7,6 @@ cbuffer CBuf
float4 main(uint tid: SV_PrimitiveID) : SV_Target
{
//return float4(color, 1.0f);
return face_color[tid / 2];
return face_color[tid];
//return float4(0.5f, 0.5f, 0.5f, 1.0f);
}
\ No newline at end of file
......@@ -128,11 +128,13 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="Bindable.cpp" />
<ClCompile Include="Box.cpp" />
<ClCompile Include="ConstantBuffer.h" />
<ClCompile Include="Drawable.cpp" />
<ClCompile Include="Graphics.cpp" />
<ClCompile Include="IndexBuffer.cpp" />
<ClCompile Include="InputLayout.cpp" />
<ClCompile Include="Logger.cpp" />
<ClCompile Include="PixelShader.cpp" />
<ClCompile Include="Timer.cpp" />
<ClCompile Include="Topology.cpp" />
......@@ -164,10 +166,12 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="Bindable.h" />
<ClInclude Include="Box.h" />
<ClInclude Include="Drawable.h" />
<ClInclude Include="Graphics.h" />
<ClInclude Include="IndexBuffer.h" />
<ClInclude Include="InputLayout.h" />
<ClInclude Include="Logger.h" />
<ClInclude Include="PixelShader.h" />
<ClInclude Include="Structs.h" />
<ClInclude Include="Timer.h" />
......
......@@ -16,6 +16,24 @@
<Filter Include="Shaders">
<UniqueIdentifier>{8305ae76-37a2-484d-a157-5d9c921795ea}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Bindables">
<UniqueIdentifier>{d7384705-be75-4663-8d23-83b73b3c5b38}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Drawables">
<UniqueIdentifier>{4980fc1f-4538-4c44-a83e-fb769ee5f9ec}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Common">
<UniqueIdentifier>{b665a2cf-965a-4eb8-bbf2-e5b6f6ee3262}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\Bindables">
<UniqueIdentifier>{bc831b9d-7a5c-4f1d-8746-3e0049897fe1}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\Drawables">
<UniqueIdentifier>{2edbfa37-15ce-47c5-a0c1-c48660bebcc8}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\Common">
<UniqueIdentifier>{aaf941b8-e05d-4faa-a18c-4ccb5206d8dc}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="WinMain.cpp">
......@@ -24,26 +42,47 @@
<ClCompile Include="Timer.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Graphics.h">
<Filter>Header Files</Filter>
</ClCompile>
<ClCompile Include="Graphics.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ConstantBuffer.h">
<Filter>Header Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="Bindable.cpp">
<Filter>Source Files</Filter>
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="IndexBuffer.cpp">
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="InputLayout.cpp">
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="PixelShader.cpp">
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="Topology.cpp">
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="TransformCBuf.cpp">
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="Drawable.cpp">
<Filter>Source Files\Drawables</Filter>
</ClCompile>
<ClCompile Include="Triangle.cpp">
<Filter>Source Files</Filter>
<Filter>Source Files\Drawables</Filter>
</ClCompile>
<ClCompile Include="VertexBuffer.cpp">
<Filter>Source Files</Filter>
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="Drawable.cpp">
<Filter>Source Files</Filter>
<ClCompile Include="VertexShader.cpp">
<Filter>Source Files\Bindables</Filter>
</ClCompile>
<ClCompile Include="MyGraphics.cpp">
<Filter>Source Files</Filter>
<ClCompile Include="Logger.cpp">
<Filter>Source Files\Common</Filter>
</ClCompile>
<ClCompile Include="Box.cpp">
<Filter>Source Files\Drawables</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
......@@ -58,20 +97,47 @@
<ClInclude Include="Timer.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Bindable.h">
<ClInclude Include="Graphics.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Triangle.h">
<Filter>Header Files</Filter>
<ClInclude Include="Bindable.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="Drawable.h">
<Filter>Header Files</Filter>
<ClInclude Include="IndexBuffer.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="InputLayout.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="PixelShader.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="Topology.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="VertexBuffer.h">
<Filter>Header Files</Filter>
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="MyGraphics.h">
<Filter>Header Files</Filter>
<ClInclude Include="VertexShader.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="Drawable.h">
<Filter>Header Files\Drawables</Filter>
</ClInclude>
<ClInclude Include="Triangle.h">
<Filter>Header Files\Drawables</Filter>
</ClInclude>
<ClInclude Include="Structs.h">
<Filter>Header Files\Common</Filter>
</ClInclude>
<ClInclude Include="TransformCBuf.h">
<Filter>Header Files\Bindables</Filter>
</ClInclude>
<ClInclude Include="Logger.h">
<Filter>Header Files\Common</Filter>
</ClInclude>
<ClInclude Include="Box.h">
<Filter>Header Files\Drawables</Filter>
</ClInclude>
</ItemGroup>
</Project>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment