58 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <renderer/gl/graphics_context.hpp>
 | |
| #include <renderer/graphics_context.hpp>
 | |
| 
 | |
| #ifdef LIGHT_PLATFORM_WINDOWS
 | |
| 	#include <renderer/dx/graphics_context.hpp>
 | |
| 	#include <renderer/dx/shared_context.hpp>
 | |
| #endif
 | |
| 
 | |
| namespace lt {
 | |
| 
 | |
| GraphicsContext *GraphicsContext::s_context = nullptr;
 | |
| 
 | |
| GraphicsContext::~GraphicsContext() = default;
 | |
| 
 | |
| auto GraphicsContext::create(GraphicsAPI api) -> Scope<GraphicsContext>
 | |
| {
 | |
| 	delete s_context;
 | |
| 
 | |
| 	if (api == GraphicsAPI::Default)
 | |
| 	{
 | |
| #if defined(LIGHT_PLATFORM_WINDOWS)
 | |
| 		api = GraphicsAPI::DirectX;
 | |
| #elif defined(LIGHT_PLATFORM_LINUX)
 | |
| 		api = GraphicsAPI::OpenGL;
 | |
| #elif defined(LIGHT_PLATFORM_MAC)
 | |
| 		api = GraphicsAPI::OpenGL;
 | |
| #endif
 | |
| 	}
 | |
| 
 | |
| 	auto scope_gfx = Scope<GraphicsContext> {};
 | |
| 	switch (api)
 | |
| 	{
 | |
| 	// opengl
 | |
| 	case GraphicsAPI::OpenGL:
 | |
| 		scope_gfx = create_scope<glGraphicsContext>(window_handle);
 | |
| 		s_context = scope_gfx.get();
 | |
| 		break;
 | |
| 	// directx
 | |
| 	case GraphicsAPI::DirectX:
 | |
| 		lt_win(
 | |
| 		    scope_gfx = create_scope<dxGraphicsContext>(window_handle); s_context = scope_gfx.get();
 | |
| 		    break;
 | |
| 		)
 | |
| 
 | |
| 		    default
 | |
| 		    : ensure(
 | |
| 		          false,
 | |
| 		          "Invalid/unsupported 'GraphicsAPI' {}",
 | |
| 		          // TODO(Light): Stringifier::graphics_api_to_string(api),
 | |
| 		          "TODO"
 | |
| 		      );
 | |
| 		return nullptr;
 | |
| 	}
 | |
| 
 | |
| 	return std::move(scope_gfx);
 | |
| }
 | |
| 
 | |
| } // namespace lt
 |