Files
UnrealEngine/Engine/Source/Runtime/OpenGLDrv/Private/OpenGL4.h
2025-05-18 13:04:45 +08:00

128 lines
4.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
/*=============================================================================
OpenGL4.h: Public OpenGL 4.3 definitions for non-common functionality
=============================================================================*/
#pragma once
#include "OpenGLPlatform.h"
#if UGL_PLATFORM_SUPPORTS_GL4
#include "UObject/UObjectHierarchyFwd.h"
#include "Misc/AssertionMacros.h"
#include "OpenGL3.h"
struct FOpenGL4 : public FOpenGL3
{
static FORCEINLINE bool SupportsDrawIndirect() { return true; }
// Optional
// Required
static FORCEINLINE void BlendFuncSeparatei(GLuint Buf, GLenum SrcRGB, GLenum DstRGB, GLenum SrcAlpha, GLenum DstAlpha)
{
glBlendFuncSeparatei(Buf, SrcRGB, DstRGB, SrcAlpha, DstAlpha);
}
static FORCEINLINE void BlendEquationSeparatei(GLuint Buf, GLenum ModeRGB, GLenum ModeAlpha)
{
glBlendEquationSeparatei(Buf, ModeRGB, ModeAlpha);
}
static FORCEINLINE void BlendFunci(GLuint Buf, GLenum Src, GLenum Dst)
{
glBlendFunci(Buf, Src, Dst);
}
static FORCEINLINE void BlendEquationi(GLuint Buf, GLenum Mode)
{
glBlendEquationi(Buf, Mode);
}
static FORCEINLINE void PatchParameteri(GLenum Pname, GLint Value)
{
glPatchParameteri(Pname, Value);
}
static FORCEINLINE void BindImageTexture(GLuint Unit, GLuint Texture, GLint Level, GLboolean Layered, GLint Layer, GLenum Access, GLenum Format)
{
glBindImageTexture(Unit, Texture, Level, Layered, Layer, Access, Format);
}
static FORCEINLINE void DispatchCompute(GLuint NumGroupsX, GLuint NumGroupsY, GLuint NumGroupsZ)
{
glDispatchCompute(NumGroupsX, NumGroupsY, NumGroupsZ);
}
static FORCEINLINE void DispatchComputeIndirect(GLintptr Offset)
{
glDispatchComputeIndirect(Offset);
}
static FORCEINLINE void MemoryBarrier(GLbitfield Barriers)
{
glMemoryBarrier(Barriers);
}
static FORCEINLINE void DrawArraysIndirect (GLenum Mode, const void *Offset)
{
glDrawArraysIndirect( Mode, Offset);
}
static FORCEINLINE void DrawElementsIndirect (GLenum Mode, GLenum Type, const void *Offset)
{
glDrawElementsIndirect( Mode, Type, Offset);
}
static FORCEINLINE void BindVertexBuffer(GLuint BindingIndex, GLuint Buffer, GLintptr Offset, GLsizei Stride)
{
glBindVertexBuffer(BindingIndex, Buffer, Offset, Stride);
}
static FORCEINLINE void VertexAttribFormat(GLuint AttribIndex, GLint Size, GLenum Type, GLboolean Normalized, GLuint RelativeOffset)
{
glVertexAttribFormat(AttribIndex, Size, Type, Normalized, RelativeOffset);
}
static FORCEINLINE void VertexAttribIFormat(GLuint AttribIndex, GLint Size, GLenum Type, GLuint RelativeOffset)
{
glVertexAttribIFormat(AttribIndex, Size, Type, RelativeOffset);
}
static FORCEINLINE void VertexAttribBinding(GLuint AttribIndex, GLuint BindingIndex)
{
glVertexAttribBinding(AttribIndex, BindingIndex);
}
static FORCEINLINE void VertexBindingDivisor(GLuint BindingIndex, GLuint Divisor)
{
glVertexBindingDivisor(BindingIndex, Divisor);
}
static FORCEINLINE void TexBufferRange(GLenum Target, GLenum InternalFormat, GLuint Buffer, GLintptr Offset, GLsizeiptr Size)
{
glTexBufferRange(Target, InternalFormat, Buffer, Offset, Size);
}
static FORCEINLINE void TextureView(GLuint ViewName, GLenum ViewTarget, GLuint SrcName, GLenum InternalFormat, GLuint MinLevel, GLuint NumLevels, GLuint MinLayer, GLuint NumLayers)
{
glTextureView(ViewName, ViewTarget, SrcName, InternalFormat, MinLevel, NumLevels, MinLayer, NumLayers);
}
static FORCEINLINE void ClearBufferData(GLenum Target, GLenum InternalFormat, GLenum Format, GLenum Type, const uint32* Data)
{
glClearBufferData(Target, InternalFormat, Format, Type, Data);
}
static void ProcessQueryGLInt();
static void ProcessExtensions( const FString& ExtensionsString );
static FORCEINLINE GLint GetMaxComputeUniformComponents() { check(MaxComputeUniformComponents != -1); return MaxComputeUniformComponents; }
static FORCEINLINE GLint GetFirstComputeUAVUnit() { return 0; }
static FORCEINLINE GLint GetMaxComputeUAVUnits() { check(MaxComputeUAVUnits != -1); return MaxComputeUAVUnits; }
static FORCEINLINE GLint GetFirstVertexUAVUnit() { return 0; }
static FORCEINLINE GLint GetFirstPixelUAVUnit() { return 0; }
static FORCEINLINE GLint GetMaxPixelUAVUnits() { check(MaxPixelUAVUnits != -1); return MaxPixelUAVUnits; }
static FORCEINLINE GLint GetMaxCombinedUAVUnits() { return MaxCombinedUAVUnits; }
static uint64 GetVideoMemorySize();
static FORCEINLINE int32 GetReadHalfFloatPixelsEnum() { return GL_HALF_FLOAT; }
protected:
static GLint MaxComputeUniformComponents;
static GLint MaxCombinedUAVUnits;
static GLint MaxComputeUAVUnits;
static GLint MaxPixelUAVUnits;
static bool bSupportsGPUMemoryInfo;
};
#endif // UGL_PLATFORM_SUPPORTS_GL4