// StgShqrpGraphic.cpp : 定义 DLL 的导出函数。 // #include "framework.h" #include "glad/gl.h" #include #include "StgSharpGraphic.h" extern char* infolog[512] = { 0 }; GladGLContext* currentContext; glfwContext* glfw; void printShaderCode(char* const* code) { printf(*code); } SSGC_API glfwContext* _cdecl initGL(int majorVersion, int minorVersion, glfwContext* ptr) { glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, majorVersion); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, minorVersion); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); #ifdef __APPLE__ glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); #endif glfw = ptr; #pragma region loadapi glfw->Init = glfwInit; glfw->Terminate = glfwTerminate; glfw->InitHint = glfwInitHint; glfw->GetVersion = glfwGetVersion; glfw->GetVersionString = glfwGetVersionString; glfw->GetError = glfwGetError; glfw->SetErrorCallback = glfwSetErrorCallback; glfw->GetMonitors = glfwGetMonitors; glfw->GetPrimaryMonitor = glfwGetPrimaryMonitor; glfw->GetMonitorPos = glfwGetMonitorPos; glfw->GetMonitorWorkarea = glfwGetMonitorWorkarea; glfw->GetMonitorPhysicalSize = glfwGetMonitorPhysicalSize; glfw->GetMonitorContentScale = glfwGetMonitorContentScale; glfw->GetMonitorName = glfwGetMonitorName; glfw->SetMonitorUserPointer = glfwSetMonitorUserPointer; glfw->GetMonitorUserPointer = glfwGetMonitorUserPointer; glfw->SetMonitorCallback = glfwSetMonitorCallback; glfw->GetVideoModes = glfwGetVideoModes; glfw->GetVideoMode = glfwGetVideoMode; glfw->SetGamma = glfwSetGamma; glfw->GetGammaRamp = glfwGetGammaRamp; glfw->SetGammaRamp = glfwSetGammaRamp; glfw->DefaultWindowHints = glfwDefaultWindowHints; glfw->WindowHint = glfwWindowHint; glfw->WindowHintString = glfwWindowHintString; glfw->CreateWindowProc = glfwCreateWindow; glfw->DestroyWindow = glfwDestroyWindow; glfw->WindowShouldClose = glfwWindowShouldClose; glfw->SetWindowShouldClose = glfwSetWindowShouldClose; glfw->SetWindowTitle = glfwSetWindowTitle; glfw->SetWindowIcon = glfwSetWindowIcon; glfw->GetWindowPos = glfwGetWindowPos; glfw->SetWindowPos = glfwSetWindowPos; glfw->GetWindowSize = glfwGetWindowSize; glfw->SetWindowSizeLimits = glfwSetWindowSizeLimits; glfw->SetWindowAspectRatio = glfwSetWindowAspectRatio; glfw->SetWindowSize = glfwSetWindowSize; glfw->GetFramebufferSize = glfwGetFramebufferSize; glfw->GetWindowFrameSize = glfwGetWindowFrameSize; glfw->GetWindowContentScale = glfwGetWindowContentScale; glfw->GetWindowOpacity = glfwGetWindowOpacity; glfw->SetWindowOpacity = glfwSetWindowOpacity; glfw->IconifyWindow = glfwIconifyWindow; glfw->RestoreWindow = glfwRestoreWindow; glfw->MaximizeWindow = glfwMaximizeWindow; glfw->ShowWindow = glfwShowWindow; glfw->HideWindow = glfwHideWindow; glfw->FocusWindow = glfwFocusWindow; glfw->RequestWindowAttention = glfwRequestWindowAttention; glfw->GetWindowMonitor = glfwGetWindowMonitor; glfw->SetWindowMonitor = glfwSetWindowMonitor; glfw->GetWindowAttrib = glfwGetWindowAttrib; glfw->SetWindowAttrib = glfwSetWindowAttrib; glfw->SetWindowUserPointer = glfwSetWindowUserPointer; glfw->GetWindowUserPointer = glfwGetWindowUserPointer; glfw->SetWindowPosCallback = glfwSetWindowPosCallback; glfw->SetWindowSizeCallback = glfwSetWindowSizeCallback; glfw->SetWindowCloseCallback = glfwSetWindowCloseCallback; glfw->SetWindowRefreshCallback = glfwSetWindowRefreshCallback; glfw->SetWindowFocusCallback = glfwSetWindowFocusCallback; glfw->SetWindowIconifyCallback = glfwSetWindowIconifyCallback; glfw->SetWindowMaximizeCallback = glfwSetWindowMaximizeCallback; glfw->SetFramebufferSizeCallback = glfwSetFramebufferSizeCallback; glfw->SetWindowContentScaleCallback = glfwSetWindowContentScaleCallback; glfw->PollEvents = glfwPollEvents; glfw->WaitEvents = glfwWaitEvents; glfw->WaitEventsTimeout = glfwWaitEventsTimeout; glfw->PostEmptyEvent = glfwPostEmptyEvent; glfw->GetInputMode = glfwGetInputMode; glfw->SetInputMode = glfwSetInputMode; glfw->RawMouseMotionSupported = glfwRawMouseMotionSupported; glfw->GetKeyName = glfwGetKeyName; glfw->GetKeyScancode = glfwGetKeyScancode; glfw->GetKey = glfwGetKey; glfw->GetMouseButton = glfwGetMouseButton; glfw->GetCursorPos = glfwGetCursorPos; glfw->SetCursorPos = glfwSetCursorPos; glfw->CreateCursor = glfwCreateCursor; glfw->CreateStandardCursor = glfwCreateStandardCursor; glfw->DestroyCursor = glfwDestroyCursor; glfw->SetCursor = glfwSetCursor; glfw->SetKeyCallback = glfwSetKeyCallback; glfw->SetCharCallback = glfwSetCharCallback; glfw->SetCharModsCallback = glfwSetCharModsCallback; glfw->SetMouseButtonCallback = glfwSetMouseButtonCallback; glfw->SetCursorPosCallback = glfwSetCursorPosCallback; glfw->SetCursorEnterCallback = glfwSetCursorEnterCallback; glfw->SetScrollCallback = glfwSetScrollCallback; glfw->SetDropCallback = glfwSetDropCallback; glfw->JoystickPresent = glfwJoystickPresent; glfw->GetJoystickAxes = glfwGetJoystickAxes; glfw->GetJoystickButtons = glfwGetJoystickButtons; glfw->GetJoystickHats = glfwGetJoystickHats; glfw->GetJoystickName = glfwGetJoystickName; glfw->GetJoystickGUID = glfwGetJoystickGUID; glfw->SetJoystickUserPointer = glfwSetJoystickUserPointer; glfw->GetJoystickUserPointer = glfwGetJoystickUserPointer; glfw->JoystickIsGamepad = glfwJoystickIsGamepad; glfw->SetJoystickCallback = glfwSetJoystickCallback; glfw->UpdateGamepadMappings = glfwUpdateGamepadMappings; glfw->GetGamepadName = glfwGetGamepadName; glfw->GetGamepadState = glfwGetGamepadState; glfw->SetClipboardString = glfwSetClipboardString; glfw->GetClipboardString = glfwGetClipboardString; glfw->GetTime = glfwGetTime; glfw->SetTime = glfwSetTime; glfw->GetTimerValue = glfwGetTimerValue; glfw->GetTimerFrequency = glfwGetTimerFrequency; glfw->MakeContextCurrent = glfwMakeContextCurrent; glfw->GetCurrentContext = glfwGetCurrentContext; glfw->SwapBuffers = glfwSwapBuffers; glfw->SwapInterval = glfwSwapInterval; glfw->ExtensionSupported = glfwExtensionSupported; glfw->GetProcAddress = glfwGetProcAddress; glfw->VulkanSupported = glfwVulkanSupported; glfw->GetRequiredInstanceExtensions = glfwGetRequiredInstanceExtensions; #if defined(VK_VERSION_1_0) glfw->GetInstanceProcAddress = glfwGetInstanceProcAddress; glfw->GetPhysicalDevicePresentationSupport = glfwGetPhysicalDevicePresentationSupport; glfw->CreateWindowSurface = glfwCreateWindowSurface; #endif #pragma endregion return glfw; } SSGC_API unsigned int loadShaderCode(char* const shaderCode, GLint shadertype) { unsigned int shader = currentContext->CreateShader(shadertype); currentContext->ShaderSource(shader, 1, &shaderCode, NULL); currentContext->CompileShader(shader); int success; currentContext->GetShaderiv(shader, GL_COMPILE_STATUS, &success); if (!success) { currentContext->GetShaderInfoLog(shader, 512, NULL, infolog); return 0; } else { return shader; } } SSGC_API unsigned int linkShaderProgram(GLuint shaderProgram) { currentContext->LinkProgram(shaderProgram); int success; currentContext->GetProgramiv(shaderProgram, GL_LINK_STATUS, &success); if (!success) { currentContext->GetProgramInfoLog(shaderProgram, 512, NULL, infolog); return 0; } else { return shaderProgram; } } char* _cdecl readLog() { infolog[511] = '\0'; return &infolog; } void setCurrentGLContxt(GladGLContext* contextPtr) { currentContext = contextPtr; }