mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-11 21:16:55 +03:00
Refactored Index/Vertex Buffer
Now uses ComPtr
This commit is contained in:
parent
aff227e84a
commit
a82a338795
20 changed files with 207 additions and 189 deletions
|
@ -1,9 +1,20 @@
|
|||
#pragma once
|
||||
#include <SimpleMath.h>
|
||||
namespace T5M {
|
||||
namespace Renderer {
|
||||
using DirectX::SimpleMath::Matrix;
|
||||
struct alignas(16) CCameraMatrixBuffer
|
||||
{
|
||||
DirectX::SimpleMath::Matrix ViewProjection;
|
||||
unsigned int Frame;
|
||||
int CameraUnderwater;
|
||||
Matrix ViewProjection;
|
||||
Matrix View;
|
||||
Matrix Projection;
|
||||
Vector3 WorldPosition;
|
||||
Vector3 WorldDirection;
|
||||
Vector2 ViewSize;
|
||||
Vector2 InvViewSize;
|
||||
alignas(16) int Frame;
|
||||
alignas(16) int CameraUnderwater;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
|
19
TR5Main/Renderer/IndexBuffer.cpp
Normal file
19
TR5Main/Renderer/IndexBuffer.cpp
Normal file
|
@ -0,0 +1,19 @@
|
|||
#include "IndexBuffer.h"
|
||||
|
||||
using Microsoft::WRL::ComPtr;
|
||||
using T5M::Renderer::Utils::throwIfFailed;
|
||||
|
||||
IndexBuffer::IndexBuffer(ID3D11Device* device, int numIndices, int* indices)
|
||||
{
|
||||
HRESULT res;
|
||||
D3D11_BUFFER_DESC desc = {};
|
||||
|
||||
desc.Usage = D3D11_USAGE_DYNAMIC;
|
||||
desc.ByteWidth = sizeof(int) * numIndices;
|
||||
desc.BindFlags = D3D11_BIND_INDEX_BUFFER;
|
||||
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
|
||||
D3D11_SUBRESOURCE_DATA initData = {};
|
||||
initData.pSysMem = indices;
|
||||
initData.SysMemPitch = sizeof(int) * numIndices;
|
||||
throwIfFailed(device->CreateBuffer(&desc, &initData, &Buffer));
|
||||
}
|
12
TR5Main/Renderer/IndexBuffer.h
Normal file
12
TR5Main/Renderer/IndexBuffer.h
Normal file
|
@ -0,0 +1,12 @@
|
|||
#pragma once
|
||||
#include <d3d11.h>
|
||||
#include "Utils.h"
|
||||
#include <wrl/client.h>
|
||||
|
||||
class IndexBuffer
|
||||
{
|
||||
public:
|
||||
Microsoft::WRL::ComPtr<ID3D11Buffer> Buffer;
|
||||
IndexBuffer() {};
|
||||
IndexBuffer(ID3D11Device* device, int numIndices, int* indices);
|
||||
};
|
|
@ -18,6 +18,9 @@
|
|||
#include "misc.h"
|
||||
#include "footprint.h"
|
||||
#include "setup.h"
|
||||
#include "Utils.h"
|
||||
#include "VertexBuffer.h"
|
||||
using namespace T5M::Renderer::Utils;
|
||||
Renderer11* g_Renderer;
|
||||
Renderer11::Renderer11()
|
||||
{
|
||||
|
@ -102,12 +105,6 @@ void Renderer11::FreeRendererData()
|
|||
|
||||
DX11_DELETE(m_textureAtlas);
|
||||
DX11_DELETE(m_skyTexture);
|
||||
DX11_DELETE(m_roomsVertexBuffer);
|
||||
DX11_DELETE(m_roomsIndexBuffer);
|
||||
DX11_DELETE(m_moveablesVertexBuffer);
|
||||
DX11_DELETE(m_moveablesIndexBuffer);
|
||||
DX11_DELETE(m_staticsVertexBuffer);
|
||||
DX11_DELETE(m_staticsIndexBuffer);
|
||||
}
|
||||
|
||||
void Renderer11::clearSceneItems()
|
||||
|
@ -150,18 +147,13 @@ ID3D11VertexShader* Renderer11::compileVertexShader(const wchar_t * fileName, co
|
|||
|
||||
printf("Compiling vertex shader: %s\n", fileName);
|
||||
UINT flags = D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_DEBUG | D3DCOMPILE_PACK_MATRIX_ROW_MAJOR;
|
||||
|
||||
res = D3DCompileFromFile(fileName, NULL, D3D_COMPILE_STANDARD_FILE_INCLUDE, function, model, flags, 0, bytecode, &errors);
|
||||
if (FAILED(res))
|
||||
{
|
||||
printf("Compilation failed: %s\n", errors->GetBufferPointer());
|
||||
return NULL;
|
||||
}
|
||||
throwIfFailed(res);
|
||||
|
||||
|
||||
ID3D11VertexShader* shader = NULL;
|
||||
res = m_device->CreateVertexShader((*bytecode)->GetBufferPointer(), (*bytecode)->GetBufferSize(), NULL, &shader);
|
||||
if (FAILED(res))
|
||||
return NULL;
|
||||
throwIfFailed(res);
|
||||
|
||||
return shader;
|
||||
}
|
||||
|
@ -175,18 +167,10 @@ ID3D11PixelShader* Renderer11::compilePixelShader(const wchar_t * fileName, cons
|
|||
|
||||
printf("Compiling pixel shader: %s\n", fileName);
|
||||
UINT flags = D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_DEBUG | D3DCOMPILE_PACK_MATRIX_ROW_MAJOR;
|
||||
res = D3DCompileFromFile(fileName, NULL, D3D_COMPILE_STANDARD_FILE_INCLUDE, function, model, flags, 0, bytecode, &errors);
|
||||
if (FAILED(res))
|
||||
{
|
||||
printf("Compilation failed: %s\n", errors->GetBufferPointer());
|
||||
return NULL;
|
||||
}
|
||||
throwIfFailed(D3DCompileFromFile(fileName, NULL, D3D_COMPILE_STANDARD_FILE_INCLUDE, function, model, flags, 0, bytecode, &errors)) ;
|
||||
|
||||
ID3D11PixelShader* shader = NULL;
|
||||
res = m_device->CreatePixelShader((*bytecode)->GetBufferPointer(), (*bytecode)->GetBufferSize(), NULL, &shader);
|
||||
if (FAILED(res))
|
||||
return NULL;
|
||||
|
||||
throwIfFailed(m_device->CreatePixelShader((*bytecode)->GetBufferPointer(), (*bytecode)->GetBufferSize(), NULL, &shader)) ;
|
||||
return shader;
|
||||
}
|
||||
|
||||
|
@ -253,9 +237,6 @@ ID3D11Buffer* Renderer11::createConstantBuffer(size_t size)
|
|||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
RendererHUDBar::RendererHUDBar(ID3D11Device* m_device,int x, int y, int w, int h, int borderSize, array<Vector4,9> colors)
|
||||
{
|
||||
array<Vector3, 9> barVertices = {
|
||||
|
@ -367,8 +348,8 @@ RendererHUDBar::RendererHUDBar(ID3D11Device* m_device,int x, int y, int w, int h
|
|||
vertices[i].Normal = Vector3(0, 0, 0);
|
||||
vertices[i].Bone = 0.0f;
|
||||
}
|
||||
vertexBuffer = VertexBuffer::Create(m_device, vertices.size(), vertices.data());
|
||||
indexBuffer = IndexBuffer::Create(m_device, barIndices.size(), barIndices.data());
|
||||
vertexBuffer = VertexBuffer(m_device, vertices.size(), vertices.data());
|
||||
indexBuffer = IndexBuffer(m_device, barIndices.size(), barIndices.data());
|
||||
|
||||
array<RendererVertex, barBorderVertices.size()> verticesBorder;
|
||||
for (int i = 0; i < barBorderVertices.size(); i++) {
|
||||
|
@ -378,7 +359,7 @@ RendererHUDBar::RendererHUDBar(ID3D11Device* m_device,int x, int y, int w, int h
|
|||
verticesBorder[i].Normal = Vector3(0, 0, 0);
|
||||
verticesBorder[i].Bone = 0.0f;
|
||||
}
|
||||
vertexBufferBorder = VertexBuffer::Create(m_device, verticesBorder.size(), verticesBorder.data());
|
||||
indexBufferBorder = IndexBuffer::Create(m_device, barBorderIndices.size(), barBorderIndices.data());
|
||||
vertexBufferBorder = VertexBuffer(m_device, verticesBorder.size(), verticesBorder.data());
|
||||
indexBufferBorder = IndexBuffer(m_device, barBorderIndices.size(), barBorderIndices.data());
|
||||
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
|
||||
#include "items.h"
|
||||
#include "effect.h"
|
||||
#include <IndexBuffer.h>
|
||||
#include "VertexBuffer.h"
|
||||
|
||||
#define MESH_BITS(x) (1 << x)
|
||||
#define DX11_RELEASE(x) if (x != NULL) x->Release()
|
||||
|
@ -231,118 +233,13 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
class VertexBuffer
|
||||
{
|
||||
public:
|
||||
ID3D11Buffer* Buffer;
|
||||
|
||||
VertexBuffer()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
~VertexBuffer()
|
||||
{
|
||||
DX11_RELEASE(Buffer);
|
||||
}
|
||||
|
||||
static VertexBuffer* Create(ID3D11Device* device, int numVertices, RendererVertex* vertices)
|
||||
{
|
||||
HRESULT res;
|
||||
|
||||
VertexBuffer* vb = new VertexBuffer();
|
||||
|
||||
D3D11_BUFFER_DESC desc;
|
||||
ZeroMemory(&desc, sizeof(desc));
|
||||
|
||||
desc.Usage = D3D11_USAGE_DYNAMIC;
|
||||
desc.ByteWidth = sizeof(RendererVertex) * numVertices;
|
||||
desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
|
||||
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
|
||||
|
||||
res = device->CreateBuffer(&desc, NULL, &vb->Buffer);
|
||||
if (FAILED(res))
|
||||
return NULL;
|
||||
|
||||
if (vertices != NULL)
|
||||
{
|
||||
ID3D11DeviceContext* context = NULL;
|
||||
device->GetImmediateContext(&context);
|
||||
|
||||
D3D11_MAPPED_SUBRESOURCE ms;
|
||||
|
||||
res = context->Map(vb->Buffer, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &ms);
|
||||
if (FAILED(res))
|
||||
return NULL;
|
||||
|
||||
memcpy(ms.pData, vertices, sizeof(RendererVertex) * numVertices);
|
||||
|
||||
context->Unmap(vb->Buffer, NULL);
|
||||
}
|
||||
|
||||
return vb;
|
||||
}
|
||||
};
|
||||
|
||||
class IndexBuffer
|
||||
{
|
||||
public:
|
||||
ID3D11Buffer* Buffer;
|
||||
|
||||
IndexBuffer()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
~IndexBuffer()
|
||||
{
|
||||
DX11_RELEASE(Buffer);
|
||||
}
|
||||
|
||||
static IndexBuffer* Create(ID3D11Device* device, int numIndices, int* indices)
|
||||
{
|
||||
HRESULT res;
|
||||
|
||||
IndexBuffer* ib = new IndexBuffer();
|
||||
|
||||
D3D11_BUFFER_DESC desc;
|
||||
ZeroMemory(&desc, sizeof(desc));
|
||||
|
||||
desc.Usage = D3D11_USAGE_DYNAMIC;
|
||||
desc.ByteWidth = sizeof(int) * numIndices;
|
||||
desc.BindFlags = D3D11_BIND_INDEX_BUFFER;
|
||||
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
|
||||
|
||||
res = device->CreateBuffer(&desc, NULL, &ib->Buffer);
|
||||
if (FAILED(res))
|
||||
return NULL;
|
||||
|
||||
if (indices != NULL)
|
||||
{
|
||||
ID3D11DeviceContext* context = NULL;
|
||||
device->GetImmediateContext(&context);
|
||||
|
||||
D3D11_MAPPED_SUBRESOURCE ms;
|
||||
|
||||
res = context->Map(ib->Buffer, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &ms);
|
||||
if (FAILED(res))
|
||||
return NULL;
|
||||
|
||||
memcpy(ms.pData, indices, sizeof(int) * numIndices);
|
||||
|
||||
context->Unmap(ib->Buffer, NULL);
|
||||
}
|
||||
|
||||
return ib;
|
||||
}
|
||||
};
|
||||
|
||||
typedef struct RendererHUDBar
|
||||
{
|
||||
VertexBuffer* vertexBufferBorder;
|
||||
IndexBuffer* indexBufferBorder;
|
||||
VertexBuffer* vertexBuffer;
|
||||
IndexBuffer* indexBuffer;
|
||||
VertexBuffer vertexBufferBorder;
|
||||
IndexBuffer indexBufferBorder;
|
||||
VertexBuffer vertexBuffer;
|
||||
IndexBuffer indexBuffer;
|
||||
/*
|
||||
Initialises a new Bar for rendering. the Coordinates are set in the Reference Resolution (default 800x600).
|
||||
The colors are setup like this
|
||||
|
@ -677,7 +574,7 @@ private:
|
|||
|
||||
|
||||
// Constant buffers
|
||||
CCameraMatrixBuffer m_stCameraMatrices;
|
||||
T5M::Renderer::CCameraMatrixBuffer m_stCameraMatrices;
|
||||
ID3D11Buffer* m_cbCameraMatrices;
|
||||
CItemBuffer m_stItem;
|
||||
ID3D11Buffer* m_cbItem;
|
||||
|
@ -715,12 +612,12 @@ private:
|
|||
Texture2D* m_textureAtlas;
|
||||
Texture2D* m_skyTexture;
|
||||
Texture2D* m_logo;
|
||||
VertexBuffer* m_roomsVertexBuffer;
|
||||
IndexBuffer* m_roomsIndexBuffer;
|
||||
VertexBuffer* m_moveablesVertexBuffer;
|
||||
IndexBuffer* m_moveablesIndexBuffer;
|
||||
VertexBuffer* m_staticsVertexBuffer;
|
||||
IndexBuffer* m_staticsIndexBuffer;
|
||||
VertexBuffer m_roomsVertexBuffer;
|
||||
IndexBuffer m_roomsIndexBuffer;
|
||||
VertexBuffer m_moveablesVertexBuffer;
|
||||
IndexBuffer m_moveablesIndexBuffer;
|
||||
VertexBuffer m_staticsVertexBuffer;
|
||||
IndexBuffer m_staticsIndexBuffer;
|
||||
vector<RendererRoom> m_rooms;
|
||||
Matrix m_hairsMatrices[12];
|
||||
short m_numHairVertices;
|
||||
|
|
|
@ -445,8 +445,8 @@ bool Renderer11::PrepareDataForTheRenderer()
|
|||
|
||||
// Create a single vertex buffer and a single index buffer for all rooms
|
||||
// NOTICE: in theory, a 1,000,000 vertices scene should have a VB of 52 MB and an IB of 4 MB
|
||||
m_roomsVertexBuffer = VertexBuffer::Create(m_device, roomVertices.size(), roomVertices.data());
|
||||
m_roomsIndexBuffer = IndexBuffer::Create(m_device, roomIndices.size(), roomIndices.data());
|
||||
m_roomsVertexBuffer = VertexBuffer(m_device, roomVertices.size(), roomVertices.data());
|
||||
m_roomsIndexBuffer = IndexBuffer(m_device, roomIndices.size(), roomIndices.data());
|
||||
|
||||
m_numHairVertices = 0;
|
||||
m_numHairIndices = 0;
|
||||
|
@ -707,8 +707,8 @@ bool Renderer11::PrepareDataForTheRenderer()
|
|||
}
|
||||
|
||||
// Create a single vertex buffer and a single index buffer for all moveables
|
||||
m_moveablesVertexBuffer = VertexBuffer::Create(m_device, moveablesVertices.size(), moveablesVertices.data());
|
||||
m_moveablesIndexBuffer = IndexBuffer::Create(m_device, moveablesIndices.size(), moveablesIndices.data());
|
||||
m_moveablesVertexBuffer = VertexBuffer(m_device, moveablesVertices.size(), moveablesVertices.data());
|
||||
m_moveablesIndexBuffer = IndexBuffer(m_device, moveablesIndices.size(), moveablesIndices.data());
|
||||
|
||||
// Step 4: prepare static meshes
|
||||
vector<RendererVertex> staticsVertices;
|
||||
|
@ -751,8 +751,8 @@ bool Renderer11::PrepareDataForTheRenderer()
|
|||
}
|
||||
|
||||
// Create a single vertex buffer and a single index buffer for all statics
|
||||
m_staticsVertexBuffer = VertexBuffer::Create(m_device, staticsVertices.size(), staticsVertices.data());
|
||||
m_staticsIndexBuffer = IndexBuffer::Create(m_device, staticsIndices.size(), staticsIndices.data());
|
||||
m_staticsVertexBuffer = VertexBuffer(m_device, staticsVertices.size(), staticsVertices.data());
|
||||
m_staticsIndexBuffer = IndexBuffer(m_device, staticsIndices.size(), staticsIndices.data());
|
||||
|
||||
// Step 5: prepare sprites
|
||||
m_sprites = (RendererSprite * *)malloc(sizeof(RendererSprite*) * g_NumSprites);
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
#include "tr5_rats_emitter.h"
|
||||
#include "tr5_bats_emitter.h"
|
||||
#include "tr5_spider_emitter.h"
|
||||
#include "CameraMatrixBuffer.h"
|
||||
using namespace T5M::Renderer;
|
||||
|
||||
extern GUNSHELL_STRUCT Gunshells[MAX_GUNSHELL];
|
||||
extern RendererHUDBar* g_DashBar;
|
||||
|
@ -63,10 +65,10 @@ bool Renderer11::drawObjectOn2DPosition(short x, short y, short objectNum, short
|
|||
m_context->ClearDepthStencilView(m_currentRenderTarget->DepthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0);
|
||||
|
||||
// Set vertex buffer
|
||||
m_context->IASetVertexBuffers(0, 1, &m_moveablesVertexBuffer->Buffer, &stride, &offset);
|
||||
m_context->IASetVertexBuffers(0, 1, m_moveablesVertexBuffer.Buffer.GetAddressOf(), &stride, &offset);
|
||||
m_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
m_context->IASetInputLayout(m_inputLayout);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer->Buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer.Buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
|
||||
|
||||
// Set shaders
|
||||
m_context->VSSetShader(m_vsInventory, NULL, 0);
|
||||
|
@ -232,10 +234,10 @@ bool Renderer11::drawShadowMap()
|
|||
m_context->VSSetShader(m_vsShadowMap, NULL, 0);
|
||||
m_context->PSSetShader(m_psShadowMap, NULL, 0);
|
||||
|
||||
m_context->IASetVertexBuffers(0, 1, &m_moveablesVertexBuffer->Buffer, &stride, &offset);
|
||||
m_context->IASetVertexBuffers(0, 1, m_moveablesVertexBuffer.Buffer.GetAddressOf(), &stride, &offset);
|
||||
m_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
m_context->IASetInputLayout(m_inputLayout);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer->Buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer.Buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
|
||||
|
||||
// Set texture
|
||||
m_context->PSSetShaderResources(0, 1, &m_textureAtlas->ShaderResourceView);
|
||||
|
@ -491,10 +493,10 @@ int Renderer11::drawInventoryScene()
|
|||
UINT offset = 0;
|
||||
|
||||
// Set vertex buffer
|
||||
m_context->IASetVertexBuffers(0, 1, &m_moveablesVertexBuffer->Buffer, &stride, &offset);
|
||||
m_context->IASetVertexBuffers(0, 1, m_moveablesVertexBuffer.Buffer.GetAddressOf(), &stride, &offset);
|
||||
m_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
m_context->IASetInputLayout(m_inputLayout);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer->Buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer.Buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
|
||||
|
||||
// Set shaders
|
||||
m_context->VSSetShader(m_vsInventory, NULL, 0);
|
||||
|
@ -1460,10 +1462,10 @@ bool Renderer11::drawRats()
|
|||
UINT stride = sizeof(RendererVertex);
|
||||
UINT offset = 0;
|
||||
|
||||
m_context->IASetVertexBuffers(0, 1, &m_moveablesVertexBuffer->Buffer, &stride, &offset);
|
||||
m_context->IASetVertexBuffers(0, 1, m_moveablesVertexBuffer.Buffer.GetAddressOf(), &stride, &offset);
|
||||
m_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
m_context->IASetInputLayout(m_inputLayout);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer->Buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer.Buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
|
||||
|
||||
if (Objects[ID_RATS_EMITTER].loaded)
|
||||
{
|
||||
|
@ -1512,10 +1514,10 @@ bool Renderer11::drawBats()
|
|||
UINT stride = sizeof(RendererVertex);
|
||||
UINT offset = 0;
|
||||
|
||||
m_context->IASetVertexBuffers(0, 1, &m_moveablesVertexBuffer->Buffer, &stride, &offset);
|
||||
m_context->IASetVertexBuffers(0, 1,m_moveablesVertexBuffer.Buffer.GetAddressOf(), &stride, &offset);
|
||||
m_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
m_context->IASetInputLayout(m_inputLayout);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer->Buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer.Buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
|
||||
|
||||
if (Objects[ID_BATS_EMITTER].loaded)
|
||||
{
|
||||
|
@ -2114,10 +2116,10 @@ bool Renderer11::drawItems(bool transparent, bool animated)
|
|||
int firstBucket = (transparent ? 2 : 0);
|
||||
int lastBucket = (transparent ? 4 : 2);
|
||||
|
||||
m_context->IASetVertexBuffers(0, 1, &m_moveablesVertexBuffer->Buffer, &stride, &offset);
|
||||
m_context->IASetVertexBuffers(0, 1, m_moveablesVertexBuffer.Buffer.GetAddressOf(), &stride, &offset);
|
||||
m_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
m_context->IASetInputLayout(m_inputLayout);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer->Buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer.Buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
|
||||
|
||||
RendererItem * item = &m_items[Lara.itemNumber];
|
||||
|
||||
|
@ -2257,10 +2259,10 @@ bool Renderer11::drawStatics(bool transparent)
|
|||
int firstBucket = (transparent ? 2 : 0);
|
||||
int lastBucket = (transparent ? 4 : 2);
|
||||
|
||||
m_context->IASetVertexBuffers(0, 1, &m_staticsVertexBuffer->Buffer, &stride, &offset);
|
||||
m_context->IASetVertexBuffers(0, 1, m_staticsVertexBuffer.Buffer.GetAddressOf(), &stride, &offset);
|
||||
m_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
m_context->IASetInputLayout(m_inputLayout);
|
||||
m_context->IASetIndexBuffer(m_staticsIndexBuffer->Buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
m_context->IASetIndexBuffer(m_staticsIndexBuffer.Buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
|
||||
|
||||
// Set shaders
|
||||
m_context->VSSetShader(m_vsStatics, NULL, 0);
|
||||
|
@ -2324,10 +2326,10 @@ bool Renderer11::drawRooms(bool transparent, bool animated)
|
|||
if (!animated)
|
||||
{
|
||||
// Set vertex buffer
|
||||
m_context->IASetVertexBuffers(0, 1, &m_roomsVertexBuffer->Buffer, &stride, &offset);
|
||||
m_context->IASetVertexBuffers(0, 1, m_roomsVertexBuffer.Buffer.GetAddressOf(), &stride, &offset);
|
||||
m_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
m_context->IASetInputLayout(m_inputLayout);
|
||||
m_context->IASetIndexBuffer(m_roomsIndexBuffer->Buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
m_context->IASetIndexBuffer(m_roomsIndexBuffer.Buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
|
||||
}
|
||||
|
||||
// Set shaders
|
||||
|
@ -2551,10 +2553,10 @@ bool Renderer11::drawHorizonAndSky()
|
|||
// Draw horizon
|
||||
if (m_moveableObjects[ID_HORIZON] != NULL)
|
||||
{
|
||||
m_context->IASetVertexBuffers(0, 1, &m_moveablesVertexBuffer->Buffer, &stride, &offset);
|
||||
m_context->IASetVertexBuffers(0, 1, m_moveablesVertexBuffer.Buffer.GetAddressOf(), &stride, &offset);
|
||||
m_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
m_context->IASetInputLayout(m_inputLayout);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer->Buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer.Buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
|
||||
|
||||
m_context->PSSetShaderResources(0, 1, &m_textureAtlas->ShaderResourceView);
|
||||
sampler = m_states->AnisotropicClamp();
|
||||
|
|
|
@ -83,9 +83,9 @@ bool Renderer11::DrawBar(float percent,const RendererHUDBar* const bar)
|
|||
float color[] = { 0,0,0,1.0f };
|
||||
m_context->ClearDepthStencilView(m_depthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 0.0f, 0xFF);
|
||||
m_context->IASetInputLayout(m_inputLayout);
|
||||
m_context->IASetVertexBuffers(0, 1, &bar->vertexBufferBorder->Buffer, &strides, &offset);
|
||||
m_context->IASetVertexBuffers(0, 1, bar->vertexBufferBorder.Buffer.GetAddressOf(), &strides, &offset);
|
||||
m_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
m_context->IASetIndexBuffer(bar->indexBufferBorder->Buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
m_context->IASetIndexBuffer(bar->indexBufferBorder.Buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
|
||||
m_context->VSSetConstantBuffers(0, 1, &m_cbHUD);
|
||||
m_context->VSSetShader(m_vsHUD, NULL, 0);
|
||||
m_context->PSSetShaderResources(0, 1, &m_HUDBarBorderTexture->ShaderResourceView);
|
||||
|
@ -100,9 +100,9 @@ bool Renderer11::DrawBar(float percent,const RendererHUDBar* const bar)
|
|||
|
||||
m_context->ClearDepthStencilView(m_depthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 0.0f, 0xFF);
|
||||
m_context->IASetInputLayout(m_inputLayout);
|
||||
m_context->IASetVertexBuffers(0, 1, &bar->vertexBuffer->Buffer, &strides, &offset);
|
||||
m_context->IASetVertexBuffers(0, 1, bar->vertexBuffer.Buffer.GetAddressOf(), &strides, &offset);
|
||||
m_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
m_context->IASetIndexBuffer(bar->indexBuffer->Buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
m_context->IASetIndexBuffer(bar->indexBuffer.Buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
|
||||
m_stHUDBar.Percent = percent;
|
||||
updateConstantBuffer(m_cbHUDBar, &m_stHUDBar, sizeof(CHUDBarBuffer));
|
||||
m_context->VSSetConstantBuffers(0, 1, &m_cbHUD);
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include "spark.h"
|
||||
#include "drip.h"
|
||||
#include "explosion.h"
|
||||
using namespace T5M::Renderer;
|
||||
using namespace T5M::Effects::Footprints;
|
||||
extern BLOOD_STRUCT Blood[MAX_SPARKS_BLOOD];
|
||||
extern FIRE_SPARKS FireSparks[MAX_SPARKS_FIRE];
|
||||
|
@ -1072,10 +1073,10 @@ bool Renderer11::drawEffects(bool transparent)
|
|||
int firstBucket = (transparent ? 2 : 0);
|
||||
int lastBucket = (transparent ? 4 : 2);
|
||||
|
||||
m_context->IASetVertexBuffers(0, 1, &m_moveablesVertexBuffer->Buffer, &stride, &offset);
|
||||
m_context->IASetVertexBuffers(0, 1, m_moveablesVertexBuffer.Buffer.GetAddressOf(), &stride, &offset);
|
||||
m_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
m_context->IASetInputLayout(m_inputLayout);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer->Buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer.Buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
|
||||
|
||||
for (int i = 0; i < m_effectsToDraw.size(); i++)
|
||||
{
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include "camera.h"
|
||||
#include "level.h"
|
||||
#include "setup.h"
|
||||
using namespace T5M::Renderer;
|
||||
|
||||
void Renderer11::collectRooms()
|
||||
{
|
||||
|
@ -464,6 +465,13 @@ void Renderer11::prepareCameraForFrame()
|
|||
m_stCameraMatrices.ViewProjection = ViewProjection;
|
||||
m_stCameraMatrices.Frame = GnFrameCounter;
|
||||
m_stCameraMatrices.CameraUnderwater = (Rooms[Camera.pos.roomNumber].flags & ENV_FLAG_WATER) != 0 ? 1: 0;
|
||||
m_stCameraMatrices.Projection = Projection;
|
||||
m_stCameraMatrices.View = View;
|
||||
m_stCameraMatrices.WorldPosition = Vector3(Camera.pos.x, Camera.pos.y, Camera.pos.z);
|
||||
m_stCameraMatrices.ViewSize = Vector2(ScreenWidth, ScreenHeight);
|
||||
m_stCameraMatrices.InvViewSize = Vector2(1 / ScreenWidth, 1 / ScreenHeight);
|
||||
m_stCameraMatrices.WorldDirection = Vector3(Camera.target.x, Camera.target.y, Camera.target.z) - Vector3(Camera.pos.x, Camera.pos.y, Camera.pos.z);
|
||||
m_stCameraMatrices.WorldDirection.Normalize();
|
||||
updateConstantBuffer(m_cbCameraMatrices, &m_stCameraMatrices, sizeof(CCameraMatrixBuffer));
|
||||
m_context->VSSetConstantBuffers(0, 1, &m_cbCameraMatrices);
|
||||
frustum.Update(View,Projection);
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include "configuration.h"
|
||||
#include "winmain.h"
|
||||
#include "GameFlowScript.h"
|
||||
using namespace T5M::Renderer;
|
||||
|
||||
extern GameConfiguration g_Configuration;
|
||||
extern GameFlow* g_GameFlow;
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include "sphere.h"
|
||||
#include "level.h"
|
||||
#include "GameFlowScript.h"
|
||||
using namespace T5M::Renderer;
|
||||
|
||||
extern GameFlow* g_GameFlow;
|
||||
|
||||
|
@ -278,10 +279,10 @@ bool Renderer11::drawLara(bool transparent, bool shadowMap)
|
|||
int firstBucket = (transparent ? 2 : 0);
|
||||
int lastBucket = (transparent ? 4 : 2);
|
||||
|
||||
m_context->IASetVertexBuffers(0, 1, &m_moveablesVertexBuffer->Buffer, &stride, &offset);
|
||||
m_context->IASetVertexBuffers(0, 1, m_moveablesVertexBuffer.Buffer.GetAddressOf(), &stride, &offset);
|
||||
m_context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
m_context->IASetInputLayout(m_inputLayout);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer->Buffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
m_context->IASetIndexBuffer(m_moveablesIndexBuffer.Buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
|
||||
|
||||
RendererItem * item = &m_items[Lara.itemNumber];
|
||||
|
||||
|
|
9
TR5Main/Renderer/Utils.cpp
Normal file
9
TR5Main/Renderer/Utils.cpp
Normal file
|
@ -0,0 +1,9 @@
|
|||
#include "framework.h"
|
||||
#include "Utils.h"
|
||||
#include <winerror.h>
|
||||
|
||||
void T5M::Renderer::Utils::throwIfFailed(const HRESULT& res)
|
||||
{
|
||||
if (FAILED(res))
|
||||
throw std::exception("An error occured!");
|
||||
}
|
9
TR5Main/Renderer/Utils.h
Normal file
9
TR5Main/Renderer/Utils.h
Normal file
|
@ -0,0 +1,9 @@
|
|||
#pragma once
|
||||
#include <winerror.h>
|
||||
namespace T5M {
|
||||
namespace Renderer {
|
||||
namespace Utils {
|
||||
void throwIfFailed(const HRESULT& res);
|
||||
}
|
||||
}
|
||||
}
|
18
TR5Main/Renderer/VertexBuffer.cpp
Normal file
18
TR5Main/Renderer/VertexBuffer.cpp
Normal file
|
@ -0,0 +1,18 @@
|
|||
#include "framework.h"
|
||||
#include "VertexBuffer.h"
|
||||
#include "Renderer11.h"
|
||||
using namespace T5M::Renderer::Utils;
|
||||
VertexBuffer::VertexBuffer(ID3D11Device* device, int numVertices, RendererVertex* vertices)
|
||||
{
|
||||
HRESULT res;
|
||||
D3D11_BUFFER_DESC desc = {};
|
||||
|
||||
desc.Usage = D3D11_USAGE_DYNAMIC;
|
||||
desc.ByteWidth = sizeof(RendererVertex) * numVertices;
|
||||
desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
|
||||
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
|
||||
D3D11_SUBRESOURCE_DATA initData = {};
|
||||
initData.pSysMem = vertices;
|
||||
initData.SysMemPitch = sizeof(RendererVertex) * numVertices;
|
||||
throwIfFailed(device->CreateBuffer(&desc, &initData, &Buffer));
|
||||
}
|
17
TR5Main/Renderer/VertexBuffer.h
Normal file
17
TR5Main/Renderer/VertexBuffer.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
#pragma once
|
||||
#include <d3d11.h>
|
||||
#include "Utils.h"
|
||||
#include <wrl\client.h>
|
||||
|
||||
struct RendererVertex;
|
||||
using Microsoft::WRL::ComPtr;
|
||||
class VertexBuffer
|
||||
{
|
||||
public:
|
||||
ComPtr<ID3D11Buffer> Buffer;
|
||||
VertexBuffer() {};
|
||||
VertexBuffer(ID3D11Device* device, int numVertices, RendererVertex* vertices);
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -1,6 +1,12 @@
|
|||
cbuffer CameraMatrixBuffer : register(b0)
|
||||
{
|
||||
float4x4 ViewProjection;
|
||||
uint Frame;
|
||||
int cameraUnderwater;
|
||||
float4x4 View;
|
||||
float4x4 Projection;
|
||||
float3 WorldPosition;
|
||||
float3 WorldDirection;
|
||||
float2 ViewSize;
|
||||
float2 InvViewSize;
|
||||
unsigned int Frame;
|
||||
int CameraUnderwater;
|
||||
};
|
|
@ -1,4 +1,4 @@
|
|||
#include "./CameraMatrixBuffer.hlsli"
|
||||
#include "CameraMatrixBuffer.hlsli"
|
||||
|
||||
struct RendererLight {
|
||||
float4 Position;
|
||||
|
@ -68,7 +68,7 @@ PixelShaderInput VS(VertexShaderInput input)
|
|||
PixelShaderInput output;
|
||||
float4 screenPos = mul(float4(input.Position, 1.0f), ViewProjection);
|
||||
float2 clipPos = screenPos.xy / screenPos.w;
|
||||
if (cameraUnderwater != water) {
|
||||
if (CameraUnderwater != water) {
|
||||
static const float PI = 3.14159265f;
|
||||
float factor = (Frame + clipPos.x*320);
|
||||
float xOffset = (sin(factor * PI/20.0f)) * (screenPos.z/1024)*5;
|
||||
|
|
|
@ -265,6 +265,7 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
|
|||
<ClInclude Include="Objects\TR5\Entity\tr5_submarine.h" />
|
||||
<ClInclude Include="Objects\TR5\Entity\tr5_willowwisp.h" />
|
||||
<ClInclude Include="Objects\TR5\Shatter\tr5_smashobject.h" />
|
||||
<ClInclude Include="Renderer\IndexBuffer.h" />
|
||||
<ClInclude Include="Renderer\RenderEnums.h" />
|
||||
<ClInclude Include="Libs\fixedpoint\fixed_point.hpp" />
|
||||
<ClInclude Include="Objects\TR1\tr1_objects.h" />
|
||||
|
@ -313,6 +314,7 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
|
|||
<ClInclude Include="Renderer\ShaderLight.h" />
|
||||
<ClInclude Include="Renderer\ShadowLightBuffer.h" />
|
||||
<ClInclude Include="Renderer\StaticBuffer.h" />
|
||||
<ClInclude Include="Renderer\Utils.h" />
|
||||
<ClInclude Include="Scripting\LanguageScript.h" />
|
||||
<ClInclude Include="Renderer\Renderer11.h" />
|
||||
<ClInclude Include="resource.h" />
|
||||
|
@ -387,6 +389,7 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
|
|||
<ClInclude Include="Specific\winmain.h" />
|
||||
<ClInclude Include="targetver.h" />
|
||||
<ClInclude Include="Objects\TR5\Object\tr5_genslot.h" />
|
||||
<ClInclude Include="Renderer\VertexBuffer.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="framework.cpp">
|
||||
|
@ -534,6 +537,9 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
|
|||
<ClCompile Include="Objects\TR4\Entity\tr4_wildboar.cpp" />
|
||||
<ClCompile Include="Objects\TR3\Vehicles\upv.cpp" />
|
||||
<ClCompile Include="Renderer\Frustum.cpp" />
|
||||
<ClCompile Include="Renderer\IndexBuffer.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Renderer\Render11Helper.cpp" />
|
||||
<ClCompile Include="Renderer\Renderer11Compatibility.cpp" />
|
||||
<ClCompile Include="Renderer\Renderer11Debug.cpp" />
|
||||
|
@ -546,6 +552,7 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
|
|||
<ClCompile Include="Renderer\Renderer11Settings.cpp" />
|
||||
<ClCompile Include="Renderer\Renderer11String.cpp" />
|
||||
<ClCompile Include="Renderer\Renderer11Frame.cpp" />
|
||||
<ClCompile Include="Renderer\Utils.cpp" />
|
||||
<ClCompile Include="Scripting\LanguageScript.cpp" />
|
||||
<ClCompile Include="Objects\TR4\Entity\tr4_demigod.cpp" />
|
||||
<ClCompile Include="Objects\TR4\Entity\tr4_guide.cpp" />
|
||||
|
@ -613,6 +620,7 @@ xcopy /Y "$(ProjectDir)Scripting\Scripts\*.lua" "$(TargetDir)\Scripts"</Command>
|
|||
<ClCompile Include="Specific\setup.cpp" />
|
||||
<ClCompile Include="Specific\winmain.cpp" />
|
||||
<ClCompile Include="Objects\TR5\Object\tr5_genslot.cpp" />
|
||||
<ClCompile Include="Renderer\VertexBuffer.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Objects\Effects\tr4_bubbles.cpp" />
|
||||
|
|
|
@ -801,6 +801,15 @@
|
|||
<ClInclude Include="Game\explosion.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Renderer\Utils.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Renderer\IndexBuffer.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Renderer\VertexBuffer.h">
|
||||
<Filter>File di intestazione</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Game\box.cpp">
|
||||
|
@ -1469,6 +1478,15 @@
|
|||
<ClCompile Include="Game\explosion.cpp">
|
||||
<Filter>File di origine</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Renderer\Utils.cpp">
|
||||
<Filter>File di origine</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Renderer\IndexBuffer.cpp">
|
||||
<Filter>File di origine</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Renderer\VertexBuffer.cpp">
|
||||
<Filter>File di origine</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue