저는 현재 커스텀 OpenGL 함수 로더를 만들려고하고 있습니다. 그래서 나만의 커스텀 게임 엔진을 디자인 할 수 있습니다.로더 헤더를 포함 할 때 OpenGL 함수를 사용할 수없는 이유는 무엇입니까?
#ifndef SWOGLL_H_
#define SWOGLL_H_
#pragma once
#include <Windows.h>
#include <gl/GL.h>
#include <gl/GLU.h>
#include <gl/glext.h>
#include <gl/wglext.h>
static PFNGLACTIVESHADERPROGRAMPROC glActiveShaderProgram;
static PFNGLACTIVETEXTUREPROC glActiveTexture;
// ...
static void* GetGLFunctionPointer(const char* functionName)
{
void* functionPointer = (void*)wglGetProcAddress(functionName);
if(
functionPointer == (void*)0x0 ||
functionPointer == (void*)0x1 ||
functionPointer == (void*)0x2 ||
functionPointer == (void*)0x3 ||
functionPointer == (void*)-0x1
)
{
HMODULE module = LoadLibraryA("opengl32.dll");
functionPointer = (void*)GetProcAddress(module, functionName);
}
return functionPointer;
}
static void GenerateGLFunctionPointers()
{
glActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC)GetGLFunctionPointer("glActiveShaderProgram");
glActiveTexture = (PFNGLACTIVETEXTUREPROC)GetGLFunctionPointer("glActiveTexture");
// ...
}
내가 내 main.cpp
파일 #include "SWOGLL.h"
이는 OpenGL 기능을 내가는 OpenGL 컨텍스트를 만든 후 GenerateGLFunctionPointers()
라고 한 가정, 잘 작동하는 경우 다음과 같이 로더 모든 코드를 포함하는 헤더 포맷됩니다.
그러나 OpenGL 컨텍스트가 이미 만들어진 경우에도 OpenGL 함수가 전혀 작동하지 않습니다.
여기에 문제가 있습니까?
그런데'GetProcAddress()'대신'wglGetProcAddress()'를 사용해야합니다. GetProcAddress() 함수는 DLL에서 함수를로드하기위한 함수이며, OpenGL은 좀 더 까다 롭습니다. 올바른 동작을 얻으려면'wglGetProcAddress()'를 사용하십시오. –
@DietrichEpp'wPGAddress'가'wglGetProcAddress'가 실패 할 경우를 대비해'GetProcAddress'를 추가했습니다.하지만 OpenGL 함수와 함께 작동하지 않으면 아마 제거 할 것입니다. –
"* 커스텀 OpenGL 함수 로더를 만들어 내 자신 만의 커스텀 게임 엔진을 만들 수 있습니다. *"게임 엔진 용 커스텀 OpenGL 로더를 만들 필요가 없습니다. [선택할 수있는 곳이 많습니다.] (https://www.opengl.org/wiki/OpenGL_Loading_Library); 그들 중 하나가 당신의 필요를 돌볼 것입니다. –