opengl draw triangle
This commit is contained in:
parent
50f7188503
commit
b9cc541028
11
engine/src/engine/data/engine_setting.h
Normal file
11
engine/src/engine/data/engine_setting.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <string>
|
||||||
|
#include "asset/render/asset_enum.h"
|
||||||
|
using std::string;
|
||||||
|
namespace engineapi
|
||||||
|
{
|
||||||
|
struct EngineSetting {
|
||||||
|
public:
|
||||||
|
inline static GraphicsAPI API = GraphicsAPI::Vulkan;
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -1,5 +0,0 @@
|
|||||||
#include "property.h"
|
|
||||||
|
|
||||||
namespace engineapi {
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,4 +1,5 @@
|
|||||||
#include "openglapi.h"
|
#include "openglapi.h"
|
||||||
|
#include "window.h"
|
||||||
#include "loader/opengl_glsl_loader.h"
|
#include "loader/opengl_glsl_loader.h"
|
||||||
namespace openglapi {
|
namespace openglapi {
|
||||||
void RenderOpenGLApi::SwitchContext()
|
void RenderOpenGLApi::SwitchContext()
|
||||||
@ -13,13 +14,26 @@ namespace openglapi {
|
|||||||
}
|
}
|
||||||
void RenderOpenGLApi::SetViewPort(uint32_t width, uint32_t height, uint32_t xOffset, uint32_t yOffset)
|
void RenderOpenGLApi::SetViewPort(uint32_t width, uint32_t height, uint32_t xOffset, uint32_t yOffset)
|
||||||
{
|
{
|
||||||
|
mViewPortInfo.width = width;
|
||||||
|
mViewPortInfo.height = height;
|
||||||
|
mViewPortInfo.xOffset = xOffset;
|
||||||
|
mViewPortInfo.yOffset = yOffset;
|
||||||
}
|
}
|
||||||
void RenderOpenGLApi::BeginFrame()
|
void RenderOpenGLApi::BeginFrame()
|
||||||
{
|
{
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
glBegin(GL_TRIANGLES);
|
||||||
|
glColor3f(1.0f, 0.0f, 0.0f);
|
||||||
|
glVertex2f(-0.5f, -0.5f);
|
||||||
|
glColor3f(0.0f, 1.0f, 0.0f);
|
||||||
|
glVertex2f(0.5f, -0.5f);
|
||||||
|
glColor3f(0.0f, 0.0f, 1.0f);
|
||||||
|
glVertex2f(0.0f, 0.5f);
|
||||||
}
|
}
|
||||||
void RenderOpenGLApi::EndFrame()
|
void RenderOpenGLApi::EndFrame()
|
||||||
{
|
{
|
||||||
|
glEnd();
|
||||||
|
OpenGLWindow::GetSingletonPtr()->Present();
|
||||||
}
|
}
|
||||||
void RenderOpenGLApi::SetStaticMesh(Mesh& mesh)
|
void RenderOpenGLApi::SetStaticMesh(Mesh& mesh)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,7 +1,48 @@
|
|||||||
#include "window.h"
|
#include "window.h"
|
||||||
|
#include <gl/GL.h>
|
||||||
namespace openglapi {
|
namespace openglapi {
|
||||||
|
void OpenGLWindow::SetupOpenGLContext()
|
||||||
|
{
|
||||||
|
HDC hdc = GetDC(mPtr);
|
||||||
|
|
||||||
|
// 设置像素格式
|
||||||
|
PIXELFORMATDESCRIPTOR pfd = {
|
||||||
|
sizeof(PIXELFORMATDESCRIPTOR),
|
||||||
|
1,
|
||||||
|
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
|
||||||
|
PFD_TYPE_RGBA,
|
||||||
|
32,
|
||||||
|
0, 0, 0, 0, 0, 0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0, 0, 0, 0,
|
||||||
|
24,
|
||||||
|
8,
|
||||||
|
0,
|
||||||
|
PFD_MAIN_PLANE,
|
||||||
|
0,
|
||||||
|
0, 0, 0
|
||||||
|
};
|
||||||
|
|
||||||
|
int pixelFormat = ChoosePixelFormat(hdc, &pfd);
|
||||||
|
SetPixelFormat(hdc, pixelFormat, &pfd);
|
||||||
|
|
||||||
|
// 创建并激活 OpenGL 上下文
|
||||||
|
HGLRC hglrc = wglCreateContext(hdc);
|
||||||
|
wglMakeCurrent(hdc, hglrc);
|
||||||
|
}
|
||||||
OpenGLWindow::OpenGLWindow(int frames, uint32_t width, uint32_t height, const char* title)
|
OpenGLWindow::OpenGLWindow(int frames, uint32_t width, uint32_t height, const char* title)
|
||||||
:engineapi::Window(width, height, title)
|
:engineapi::Window(width, height, title)
|
||||||
{
|
{
|
||||||
|
SetupOpenGLContext();
|
||||||
|
// 设置视口和背景颜色
|
||||||
|
glViewport(0, 0, width, height);
|
||||||
|
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
|
}
|
||||||
|
void OpenGLWindow::Present()
|
||||||
|
{
|
||||||
|
HDC hdc = GetDC(mPtr);
|
||||||
|
SwapBuffers(hdc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2,7 +2,14 @@
|
|||||||
#include "render/window.h"
|
#include "render/window.h"
|
||||||
namespace openglapi {
|
namespace openglapi {
|
||||||
class OpenGLWindow : public engineapi::Window {
|
class OpenGLWindow : public engineapi::Window {
|
||||||
|
private:
|
||||||
|
void SetupOpenGLContext();
|
||||||
public:
|
public:
|
||||||
OpenGLWindow(int frames, uint32_t width, uint32_t height, const char* title);
|
OpenGLWindow(int frames, uint32_t width, uint32_t height, const char* title);
|
||||||
|
void Present();
|
||||||
|
public:
|
||||||
|
static OpenGLWindow* GetSingletonPtr() {
|
||||||
|
return (OpenGLWindow*)engineapi::Window::GetSingletonPtr();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -1,4 +1,5 @@
|
|||||||
#include "renderapi.h"
|
#include "renderapi.h"
|
||||||
|
#include "data/engine_setting.h"
|
||||||
#include "node/rendernode.h"
|
#include "node/rendernode.h"
|
||||||
#include "node/rendernode_forward.h"
|
#include "node/rendernode_forward.h"
|
||||||
#ifdef VULKAN_API
|
#ifdef VULKAN_API
|
||||||
@ -36,6 +37,7 @@ namespace engineapi {
|
|||||||
}
|
}
|
||||||
RenderAPI* RenderAPI::MakeInstance()
|
RenderAPI* RenderAPI::MakeInstance()
|
||||||
{
|
{
|
||||||
|
GraphicsAPI api = EngineSetting::API;
|
||||||
#ifdef VULKAN_API
|
#ifdef VULKAN_API
|
||||||
if(api == GraphicsAPI::Vulkan)
|
if(api == GraphicsAPI::Vulkan)
|
||||||
return new vulkanapi::RenderVulkanAPI();
|
return new vulkanapi::RenderVulkanAPI();
|
||||||
@ -46,13 +48,13 @@ namespace engineapi {
|
|||||||
#endif
|
#endif
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
RenderAPI* RenderAPI::API(GraphicsAPI _api)
|
RenderAPI* RenderAPI::API(GraphicsAPI api)
|
||||||
{
|
{
|
||||||
if (ms_Singleton) {
|
if (ms_Singleton) {
|
||||||
delete ms_Singleton;
|
delete ms_Singleton;
|
||||||
ms_Singleton = nullptr;
|
ms_Singleton = nullptr;
|
||||||
}
|
}
|
||||||
api = _api;
|
EngineSetting::API = api;
|
||||||
return MakeInstance();
|
return MakeInstance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -40,11 +40,6 @@ namespace engineapi
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
static RenderAPI* MakeInstance();
|
static RenderAPI* MakeInstance();
|
||||||
static GraphicsAPI API() {
|
static RenderAPI* API(GraphicsAPI api);
|
||||||
return api;
|
|
||||||
}
|
|
||||||
static RenderAPI* API(GraphicsAPI _api);
|
|
||||||
private:
|
|
||||||
inline static GraphicsAPI api = GraphicsAPI::Vulkan;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -1,5 +1,5 @@
|
|||||||
#include "window.h"
|
#include "window.h"
|
||||||
#include "renderapi.h"
|
#include "data/engine_setting.h"
|
||||||
#ifdef VULKAN_API
|
#ifdef VULKAN_API
|
||||||
#include "vulkanapi/window.h"
|
#include "vulkanapi/window.h"
|
||||||
#endif // VULKAN_API
|
#endif // VULKAN_API
|
||||||
@ -10,7 +10,7 @@ namespace engineapi {
|
|||||||
Window::WindowClass Window::WindowClass::wndClass;
|
Window::WindowClass Window::WindowClass::wndClass;
|
||||||
Window* Window::MakeInstance(int frames, uint32_t width, uint32_t height, const char* title)
|
Window* Window::MakeInstance(int frames, uint32_t width, uint32_t height, const char* title)
|
||||||
{
|
{
|
||||||
GraphicsAPI api = RenderAPI::API();
|
GraphicsAPI api = EngineSetting::API;
|
||||||
#ifdef VULKAN_API
|
#ifdef VULKAN_API
|
||||||
if(api == GraphicsAPI::Vulkan)
|
if(api == GraphicsAPI::Vulkan)
|
||||||
return new vulkanapi::VulkanWindow(frames, width, height, title);
|
return new vulkanapi::VulkanWindow(frames, width, height, title);
|
||||||
|
|||||||
@ -8,15 +8,16 @@ target("zengine")
|
|||||||
add_rules("volk.env", "glsl.env")
|
add_rules("volk.env", "glsl.env")
|
||||||
add_rules("c++.codegen",{
|
add_rules("c++.codegen",{
|
||||||
files = {"src/engine/render/asset/*.h",
|
files = {"src/engine/render/asset/*.h",
|
||||||
--"src/engine/asset/asset.h",
|
"src/engine/data/*.h",
|
||||||
"src/engine/asset/res/*.h"}
|
"src/engine/asset/res/*.h"}
|
||||||
})
|
})
|
||||||
add_deps("zlog","zlib")
|
add_deps("zlog","zlib")
|
||||||
add_defines("VULKAN_API", "OPENGL_API")
|
add_defines("VULKAN_API", "OPENGL_API")
|
||||||
add_packages("vulkansdk","tinyobjloader","assimp","nlohmann_json","opencl", "opencl-headers")
|
add_packages("vulkansdk","tinyobjloader","assimp","nlohmann_json")
|
||||||
|
add_packages("opencl", "opencl-headers")
|
||||||
add_includedirs("src/engine")
|
add_includedirs("src/engine")
|
||||||
add_includedirs("src/3rdparty/volk", "src/3rdparty/vulkan-memory-allocator", "src/3rdparty/template")
|
add_includedirs("src/3rdparty/volk", "src/3rdparty/vulkan-memory-allocator", "src/3rdparty/template")
|
||||||
add_syslinks("user32", "Ole32")
|
add_syslinks("user32", "Ole32", "Gdi32","Opengl32")
|
||||||
add_files("src/*.cpp", "src/**.cpp")
|
add_files("src/*.cpp", "src/**.cpp")
|
||||||
add_files("src/3rdparty/**.c")
|
add_files("src/3rdparty/**.c")
|
||||||
add_headerfiles("src/**.h","src/**.inl")
|
add_headerfiles("src/**.h","src/**.inl")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user