Need extern (C) interface even though using Derelict GLFW

WhatMeWorry via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jan 3 20:34:19 PST 2015


I've been translating C++, OpenGL, and GLUT code into D, Derelict 
OpenGL, and Derelict GLFW using:

import derelict.opengl3.gl3;
import derelict.glfw3.glfw3;

auto window = glfwCreateWindow(800, 600, "Shaders", null, null);

etc.


Things have been going well. I then tried to implement window 
resizing with a callback function and the 
glfwSetWindowSizeCallback() statement.


void windowResizeCallback(GLFWwindow* window, int width, int 
height)
{
     glViewport(0, 0, width, height);
}

and

glfwSetWindowSizeCallback(window, &windowResizeCallback);


however, I kept getting the following compiler error:
Error	1	Error: function pointer glfwSetWindowSizeCallback 
(GLFWwindow*, extern (C) void function(GLFWwindow*, int, int) 
nothrow)
is not callable using argument types (GLFWwindow*, void 
function(GLFWwindow* window, int width, int height))

Well, I was able to get it to compile and work by adding the 
following "decoration"

extern (C) nothrow
{
     void windowResizeCallback(GLFWwindow* window, int width, int 
height)
     {
         glViewport(0, 0, width, height);
     }
}


Now it resizes the screen successfully, but I feel like I've 
failed by using extern (C) nothrow. Shouldn't Derelict GLFW be 
providing a D interface?

Maybe GLFW callback functions can't handled through Derelict GLFW?




More information about the Digitalmars-d-learn mailing list