typedef struct
{
WindowData data;
bool vsync;
} Window;
typedef struct
{
Window window;
GLFWwindow *native_window;
} WindowsWindow;
Window *windowCreate(const WindowProperties props, Handle id)
{
WindowsWindow *windows_window = malloc(sizeof(WindowsWindow));
*windows_window = windowswindowCreate(props);
glfwSetWindowUserPointer(windows_window->native_window, &windows_window->window.data);
Window *window = (Window *)windows_window;
window->data.id = id;
return window;
}
void windowSetContextCurrent(Window *window)
{
//log_info("Window Context current, %s", window->data.props.name);
glfwMakeContextCurrent(((WindowsWindow *)window)->native_window);
}
所以这是一个小片段,希望能传达我之前所做的事情。我将特定于平台的窗口转换为通用窗口指针,然后在需要时将通用指针转换为特定于平台的指针以访问其特定于平台的数据(当前只是本机窗口),现在我遇到了对齐问题,特别是在我的 Nuklear GUI 层中,导致删除窗口时出错,窗口的 ID 现在访问窗口的宽度而不是窗口 ID(它在我的所有窗口数组中的索引),所以我访问 800 处的索引而不是 0。
因此,我们学到的教训是不要让指针指向不同类型的指针(也许有些用例很好,但绝对不是在这里)。有没有更好的方法来做到这一点?