// Copyright 2017 Dolphin Emulator Project // Licensed under GPLv2+ // Refer to the license.txt file included. #pragma once #include #include "Common/GL/GLUtil.h" #include "VideoBackends/OGL/ProgramShaderCache.h" #include "VideoCommon/AbstractPipeline.h" #include "VideoCommon/RenderState.h" namespace OGL { class OGLPipeline final : public AbstractPipeline { public: explicit OGLPipeline(const GLVertexFormat* vertex_format, const RasterizationState& rasterization_state, const DepthState& depth_state, const BlendingState& blending_state, const PipelineProgram* program, GLenum gl_primitive); ~OGLPipeline() override; const GLVertexFormat* GetVertexFormat() const { return m_vertex_format; } const RasterizationState& GetRasterizationState() const { return m_rasterization_state; } const DepthState& GetDepthState() const { return m_depth_state; } const BlendingState& GetBlendingState() const { return m_blending_state; } const PipelineProgram* GetProgram() const { return m_program; } bool HasVertexInput() const { return m_vertex_format != nullptr; } GLenum GetGLPrimitive() const { return m_gl_primitive; } static std::unique_ptr Create(const AbstractPipelineConfig& config); private: const GLVertexFormat* m_vertex_format; RasterizationState m_rasterization_state; DepthState m_depth_state; BlendingState m_blending_state; const PipelineProgram* m_program; GLenum m_gl_primitive; }; } // namespace OGL