From fd61e60226c9f340da55bc06491181c7483a8606 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20Wiesner?= Date: Sun, 1 Mar 2020 16:40:24 +0100 Subject: [PATCH] =?UTF-8?q?FPS-m=C3=A9r=C5=91=20=C3=A9s=20Geometry=20k?= =?UTF-8?q?=C3=A9sz?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DXWindow.cpp | 14 +++++++--- DXWindow.h | 1 + RUNTIME/shaders/basic_shader.hlsl | 3 ++- main.cpp | 44 +++++++++++++++++++++++++++++-- 4 files changed, 55 insertions(+), 7 deletions(-) diff --git a/DXWindow.cpp b/DXWindow.cpp index 5f24391..1dd64b3 100644 --- a/DXWindow.cpp +++ b/DXWindow.cpp @@ -288,7 +288,12 @@ namespace eg3d { // TODO konstansbuffer bekötése ////////// OBJEKTUMOK KIRAJZOLÁSA - drawObject(); + //drawObject(); + + for (unsigned i = 0; i < drawables.size(); i++) + { + drawables[i]->draw(mCommandList); + } // TODO drawables kirajzolása @@ -359,9 +364,9 @@ namespace eg3d { void DXWindow::initVertices() { vertices = { - { -0.5f, -0.5f, 0.1f }, - { 0.5f, -0.5f, 0.1f }, - { 0, 0.98f, 0.1f }, + { -0.5f, -0.5f, 0.1f, 1.0f, 0.0f, 0.0f }, + { 0.5f, -0.5f, 0.1f , 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.98f, 0.1f, 0.0f, 0.0f, 1.0f }, }; indices = { 0, 2, 1 }; @@ -371,6 +376,7 @@ namespace eg3d { { inputElements = { {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0}, + {"COLOR", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0} // TODO további elemek létrehozása }; } diff --git a/DXWindow.h b/DXWindow.h index 3ead507..1893670 100644 --- a/DXWindow.h +++ b/DXWindow.h @@ -18,6 +18,7 @@ struct Vertex { float x, y, z; + float r, g, b; }; // TODO konstansbuffer típus diff --git a/RUNTIME/shaders/basic_shader.hlsl b/RUNTIME/shaders/basic_shader.hlsl index 1737dd2..dd82d71 100644 --- a/RUNTIME/shaders/basic_shader.hlsl +++ b/RUNTIME/shaders/basic_shader.hlsl @@ -1,6 +1,7 @@ struct VSInput // vertex shader bemeneti struktúra { float3 position_D : POSITION; + float3 color : COLOR; }; struct VSOutput // vertex shader kimeneti struktúra @@ -14,7 +15,7 @@ VSOutput vs_main(VSInput input) VSOutput output; // vertex shader kimenete output.position_H = float4(input.position_D, 1.0); - output.color = input.position_D; + output.color = input.color; return output; } diff --git a/main.cpp b/main.cpp index 48e4c07..af35c09 100644 --- a/main.cpp +++ b/main.cpp @@ -15,6 +15,11 @@ size_t gFrames = 0; void CB_FPSaux(eg3d::Timer *pTimer, const double *pTrigTimeElapsed, void *ptr) { // TODO kĂ©pkockaidĹ‘ Ă©s FPS kiszámĂ­tása; kĂ©pkockaszámlálĂł nullázása; eredmĂ©nyek kiĂ­rása + + double fps = gFrames / *pTrigTimeElapsed; + gFrames = 0; + + LOG(std::to_string(1 / fps * 1000) + "ms, " + std::to_string(fps) + "FPS"); } using namespace eg3d; @@ -24,7 +29,39 @@ int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszA eg3d::DXWindow win; // megjelenĂ­tĂ©s be, alapĂ©rtelmezett window procedure használata win.setTitle("Keretszöveg"); // keretszöveg beállĂ­tása + // FPS-mĂ©rĹ‘ callback-fĂĽggvĂ©ny regisztrálása + TimerCallbackData timerCBData; + timerCBData.callBackFn = CB_FPSaux; + timerCBData.ptr = nullptr; + gTmr1s.reg(timerCBData); + // TODO geometria Ă©s pool lĂ©trehozása + std::vector vertices = { // vertexek + { -0.5f, -0.5f, 0.1f, 1.0f, 0.0f, 0.0f }, + { 0.5f, -0.5f, 0.1f , 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.98f, 0.1f, 0.0f, 0.0f, 1.0f }, + }; + + std::vector indices = { 0, 2, 1 }; // indexek + + auto pGeo = std::shared_ptr>(new Geometry(win.getDevice())); + pGeo->setVertices(vertices); + pGeo->setIndices(indices); + + DrawablePool drawables; // geometriák halmaza + drawables.push_back(pGeo); // pGeo geometria hozzáadása + + vertices = { // vertexek + { -0.3f, -0.5f, 0.05f, 1.0f, 0.2f, 0.0f }, + { 0.3f, -0.5f, 0.05f , 0.2f, 1.0f, 0.0f }, + { 0.0f, 0.7f, 0.05f, 0.0f, 0.2f, 1.0f }, + }; + + auto pGeo2 = std::shared_ptr>(new Geometry(win.getDevice())); + pGeo2->setVertices(vertices); + pGeo2->setIndices(indices); + + drawables.push_back(pGeo2); MSG msg = { }; @@ -36,12 +73,15 @@ int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszA DispatchMessage(&msg); } else { - Sleep(50); + Sleep(15); - win.Draw(DrawablePool()); + win.Draw(drawables); // kirajzolás + + gFrames++; // kĂ©pkockaszám lĂ©ptetĂ©se } // TODO egy másodperces periĂłdusidejű Ăłra lĂ©ptetĂ©se + gTmr1s.tick(); } return msg.wParam;