#pragma once #include "BsGLPrerequisites.h" #include "BsGpuProgram.h" namespace BansheeEngine { /** * @brief GPU program compiled from GLSL and usable by OpenGL. */ class BS_RSGL_EXPORT GLSLGpuProgramCore : public GpuProgramCore { public: ~GLSLGpuProgramCore(); /** * @copydoc GpuProgramCore::isSupported */ bool isSupported() const override; /** * @brief Gets internal OpenGL handle to the program. */ GLuint getGLHandle() const { return mGLHandle; } /** * @brief Gets an unique index for this GPU program. Each created GPU program is * assigned a unique index on creation. */ UINT32 getProgramID() const { return mProgramID; } private: friend class GLSLProgramFactory; GLSLGpuProgramCore(const String& source, const String& entryPoint, GpuProgramType gptype, GpuProgramProfile profile, bool isAdjacencyInfoRequired); /** * @copydoc GpuProgramCore::initialize */ void initialize() override; private: UINT32 mProgramID; GLuint mGLHandle; static UINT32 mVertexShaderCount; static UINT32 mFragmentShaderCount; static UINT32 mGeometryShaderCount; static UINT32 mHullShaderCount; static UINT32 mDomainShaderCount; }; }