mirror of
https://github.com/rrika/cdcEngineDXHR.git
synced 2025-02-17 04:07:47 +00:00
add staticvertexbuffer and use for spinnycube
This commit is contained in:
parent
fed637a4e0
commit
bca3a05b51
10
rendering/CommonVertexBuffer.h
Normal file
10
rendering/CommonVertexBuffer.h
Normal file
@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
namespace cdc {
|
||||
|
||||
class CommonVertexBuffer {
|
||||
public:
|
||||
virtual ~CommonVertexBuffer() = default;
|
||||
};
|
||||
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
#include <d3d11_1.h>
|
||||
#include "PCDX11StateManager.h"
|
||||
#include "PCDX11PixelShader.h"
|
||||
#include "PCDX11VertexBuffer.h"
|
||||
|
||||
namespace cdc {
|
||||
|
||||
@ -18,6 +19,21 @@ void PCDX11StateManager::setIndexBuffer(PCDX11IndexBuffer *indexBuffer) {
|
||||
}
|
||||
}
|
||||
|
||||
void PCDX11StateManager::setVertexBuffer(PCDX11VertexBuffer *vertexBuffer) {
|
||||
if (vertexBuffer == nullptr)
|
||||
return;
|
||||
|
||||
ID3D11Buffer *buffer = vertexBuffer->getD3DBuffer();
|
||||
uint32_t stride = vertexBuffer->getStride();
|
||||
uint32_t offset = 0;
|
||||
if (buffer != m_vertexBufferD3D && stride != m_vertexStride) {
|
||||
vertexBuffer->method14();
|
||||
m_deviceContext->IASetVertexBuffers(0, 1, &buffer, &stride, &offset);
|
||||
m_vertexBufferD3D = buffer;
|
||||
m_vertexStride = stride;
|
||||
}
|
||||
}
|
||||
|
||||
void PCDX11StateManager::setPixelShader(PCDX11PixelShader *pixelShader) {
|
||||
if (pixelShader != m_pixelShader) {
|
||||
if (pixelShader) {
|
||||
|
@ -6,6 +6,8 @@
|
||||
|
||||
namespace cdc {
|
||||
|
||||
class PCDX11VertexBuffer;
|
||||
|
||||
class PCDX11StateManager : public PCDX11InternalResource {
|
||||
ID3D11DeviceContext *m_deviceContext; // 10
|
||||
bool m_dirtyRasterizerState; // 19
|
||||
@ -24,6 +26,8 @@ class PCDX11StateManager : public PCDX11InternalResource {
|
||||
uint8_t m_dirtySamplersLast; // 187
|
||||
|
||||
ID3D11Buffer *m_indexBufferD3D; // 188
|
||||
ID3D11Buffer *m_vertexBufferD3D; // 18C
|
||||
uint32_t m_vertexStride; // 190
|
||||
PCDX11PixelShader *m_pixelShader; // 198
|
||||
public:
|
||||
PCDX11StateManager();
|
||||
@ -34,6 +38,7 @@ public:
|
||||
{}
|
||||
|
||||
void setIndexBuffer(PCDX11IndexBuffer *indexBuffer);
|
||||
void setVertexBuffer(PCDX11VertexBuffer *vertexBuffer);
|
||||
void setPixelShader(PCDX11PixelShader *pixelShader);
|
||||
void setPrimitiveTopology(int topology);
|
||||
|
||||
|
28
rendering/PCDX11StaticVertexBuffer.h
Normal file
28
rendering/PCDX11StaticVertexBuffer.h
Normal file
@ -0,0 +1,28 @@
|
||||
#pragma once
|
||||
#include "PCDX11VertexBuffer.h"
|
||||
|
||||
namespace cdc {
|
||||
|
||||
class PCDX11StaticVertexBuffer :
|
||||
public PCDX11VertexBuffer
|
||||
// public PCDX11DeferredUpdate
|
||||
{
|
||||
public:
|
||||
PCDX11StaticVertexBuffer(ID3D11Buffer* buffer, uint32_t stride) : // hack
|
||||
stride(stride),
|
||||
buffer(buffer)
|
||||
{}
|
||||
|
||||
uint32_t stride;
|
||||
uint32_t dword10;
|
||||
uint32_t baseVertex;
|
||||
ID3D11Buffer *buffer;
|
||||
|
||||
uint32_t getBaseVertex() { return baseVertex; }
|
||||
ID3D11Buffer *getD3DBuffer() { return buffer; }
|
||||
uint32_t method0C() { return dword10; }
|
||||
uint32_t getStride() { return stride; }
|
||||
void method14() {}
|
||||
};
|
||||
|
||||
}
|
15
rendering/PCDX11VertexBuffer.h
Normal file
15
rendering/PCDX11VertexBuffer.h
Normal file
@ -0,0 +1,15 @@
|
||||
#pragma once
|
||||
#include "CommonVertexBuffer.h"
|
||||
|
||||
namespace cdc {
|
||||
|
||||
class PCDX11VertexBuffer : public CommonVertexBuffer {
|
||||
public:
|
||||
virtual uint32_t getBaseVertex() = 0;
|
||||
virtual ID3D11Buffer *getD3DBuffer() = 0;
|
||||
virtual uint32_t method0C() = 0;
|
||||
virtual uint32_t getStride() = 0;
|
||||
virtual void method14() = 0;
|
||||
};
|
||||
|
||||
}
|
@ -13,6 +13,7 @@
|
||||
#include "rendering/PCDX11StateManager.h"
|
||||
#include "rendering/PCDX11IndexBuffer.h"
|
||||
#include "rendering/PCDX11Texture.h"
|
||||
#include "rendering/PCDX11StaticVertexBuffer.h"
|
||||
#include "drm/ResolveReceiver.h"
|
||||
#include "drm/sections/RenderResourceSection.h"
|
||||
|
||||
@ -409,6 +410,10 @@ int spinnyCube(HWND window,
|
||||
|
||||
device->CreateBuffer(&vertexBufferDesc, &vertexData, &vertexBuffer);
|
||||
|
||||
UINT stride = 11 * 4; // vertex size (11 floats: float3 position, float3 normal, float2 texcoord, float3 color)
|
||||
UINT offset = 0;
|
||||
cdc::PCDX11StaticVertexBuffer cdcVertexBuffer(vertexBuffer, stride);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
D3D11_BUFFER_DESC indexBufferDesc = {};
|
||||
@ -473,9 +478,6 @@ int spinnyCube(HWND window,
|
||||
|
||||
FLOAT backgroundColor[4] = { 0.025f, 0.025f, 0.025f, 1.0f };
|
||||
|
||||
UINT stride = 11 * 4; // vertex size (11 floats: float3 position, float3 normal, float2 texcoord, float3 color)
|
||||
UINT offset = 0;
|
||||
|
||||
D3D11_VIEWPORT viewport = { 0.0f, 0.0f, static_cast<float>(depthBufferDesc.Width), static_cast<float>(depthBufferDesc.Height), 0.0f, 1.0f };
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -543,7 +545,8 @@ int spinnyCube(HWND window,
|
||||
|
||||
stateManager.setPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
deviceContext->IASetInputLayout(inputLayout);
|
||||
deviceContext->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset);
|
||||
stateManager.setVertexBuffer(&cdcVertexBuffer);
|
||||
//deviceContext->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset);
|
||||
stateManager.setIndexBuffer(&cdcIndexBuffer);
|
||||
//deviceContext->IASetIndexBuffer(indexBuffer, DXGI_FORMAT_R32_UINT, 0);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user