redo code and add xlib surface loader interface
This commit is contained in:
@@ -3,11 +3,13 @@
|
|||||||
#include "core/gryphn_format.h"
|
#include "core/gryphn_format.h"
|
||||||
#include "core/gryphn_present_mode.h"
|
#include "core/gryphn_present_mode.h"
|
||||||
typedef struct gnMetalSurfaceCreateInfo gnMetalSurfaceCreateInfo;
|
typedef struct gnMetalSurfaceCreateInfo gnMetalSurfaceCreateInfo;
|
||||||
|
typedef struct gnXlibSurfaceCreateInfo gnXlibSurfaceCreateInfo;
|
||||||
typedef struct gnSurfaceCapabilities gnSurfaceCapabilities;
|
typedef struct gnSurfaceCapabilities gnSurfaceCapabilities;
|
||||||
typedef struct gnPhysicalDeviceProperties gnPhysicalDeviceProperties;
|
typedef struct gnPhysicalDeviceProperties gnPhysicalDeviceProperties;
|
||||||
typedef struct gnDeviceCreateInfo gnDeviceCreateInfo;
|
typedef struct gnDeviceCreateInfo gnDeviceCreateInfo;
|
||||||
|
|
||||||
typedef gnReturnCode (*PFN_gnCreateMetalSurface)(gnInstance, gnMetalSurfaceCreateInfo*, gnSurface*);
|
typedef gnReturnCode (*PFN_gnCreateMetalSurface)(gnInstance, gnMetalSurfaceCreateInfo*, gnSurface*);
|
||||||
|
typedef gnReturnCode (*PFN_gnCreateXlibSurface)(gnInstance, gnXlibSurfaceCreateInfo*, gnSurface*);
|
||||||
typedef gnReturnCode (*PFN_enumeratePhysicalDevices)(gnInstance, uint32_t*, gnPhysicalDevice*);
|
typedef gnReturnCode (*PFN_enumeratePhysicalDevices)(gnInstance, uint32_t*, gnPhysicalDevice*);
|
||||||
typedef gnReturnCode (*PFN_gnGetPhysicalDeviceProperties)(gnPhysicalDevice, gnPhysicalDeviceProperties*);
|
typedef gnReturnCode (*PFN_gnGetPhysicalDeviceProperties)(gnPhysicalDevice, gnPhysicalDeviceProperties*);
|
||||||
typedef gnReturnCode (*PFN_gnCreateDevice)(gnInstance, gnDeviceCreateInfo*, gnDevice);
|
typedef gnReturnCode (*PFN_gnCreateDevice)(gnInstance, gnDeviceCreateInfo*, gnDevice);
|
||||||
@@ -19,6 +21,7 @@ typedef gnReturnCode (*PFN_gnDestroyInstance)(gnInstance);
|
|||||||
|
|
||||||
typedef struct gnInstanceDispatchTable {
|
typedef struct gnInstanceDispatchTable {
|
||||||
PFN_gnCreateMetalSurface createMetalSurface;
|
PFN_gnCreateMetalSurface createMetalSurface;
|
||||||
|
PFN_gnCreateXlibSurface createXlibSurface;
|
||||||
PFN_gnGetSurfaceCapabilities getSurfaceCapabilities;
|
PFN_gnGetSurfaceCapabilities getSurfaceCapabilities;
|
||||||
PFN_gnGetSurfaceFormats getSurfaceFormats;
|
PFN_gnGetSurfaceFormats getSurfaceFormats;
|
||||||
PFN_gnGetSurfacePresentModes getSurfacePresentModes;
|
PFN_gnGetSurfacePresentModes getSurfacePresentModes;
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#ifdef GN_USE_SURFACE_COCOA
|
||||||
#include "gryphn_handle.h"
|
#include "gryphn_handle.h"
|
||||||
#include "gryphn_return_code.h"
|
#include "gryphn_return_code.h"
|
||||||
|
|
||||||
#ifndef GN_CA_METAL_LAYER
|
#import <QuartzCore/CAMetalLayer.h>
|
||||||
typedef struct CAMetalLayer CAMetalLayer;
|
|
||||||
#endif
|
|
||||||
typedef struct gnMetalSurfaceCreateInfo {
|
typedef struct gnMetalSurfaceCreateInfo {
|
||||||
CAMetalLayer* metalLayer;
|
CAMetalLayer* metalLayer;
|
||||||
} gnMetalSurfaceCreateInfo;
|
} gnMetalSurfaceCreateInfo;
|
||||||
gnReturnCode gnCreateMetalSurface(gnInstance instance, gnMetalSurfaceCreateInfo* createInfo, gnSurface* surface);
|
gnReturnCode gnCreateMetalSurface(gnInstance instance, gnMetalSurfaceCreateInfo* createInfo, gnSurface* surface);
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "gryphn_metal_surface.h"
|
#include "gryphn_metal_surface.h"
|
||||||
|
#include "gryphn_xlib_surface.h"
|
||||||
|
#include "gryphn_return_code.h"
|
||||||
|
#include "gryphn_handle.h"
|
||||||
#include "core/gryphn_vec2d.h"
|
#include "core/gryphn_vec2d.h"
|
||||||
#include "core/gryphn_format.h"
|
#include "core/gryphn_format.h"
|
||||||
#include "core/gryphn_present_mode.h"
|
#include "core/gryphn_present_mode.h"
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#include "gryphn_xlib_surface.h"
|
||||||
|
#include "instance/gryphn_instance.h"
|
||||||
|
|
||||||
|
gnReturnCode gnCreateXlibSurface(gnInstance instance, gnXlibSurfaceCreateInfo* createInfo, gnSurface* surface) {
|
||||||
|
return instance->dispatchTable.createXlibSurface(instance, createInfo, surface);
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#pragma once
|
||||||
|
#ifdef GN_USE_SURFACE_XLIB
|
||||||
|
#include "gryphn_handle.h"
|
||||||
|
#include "gryphn_return_code.h"
|
||||||
|
|
||||||
|
#include "X11/Xlib.h"
|
||||||
|
typedef struct gnXlibSurfaceCreateInfo {
|
||||||
|
Display* dpy;
|
||||||
|
Window window;
|
||||||
|
} gnXlibSurfaceCreateInfo;
|
||||||
|
|
||||||
|
gnReturnCode gnCreateXlibSurface(gnInstance instance, gnXlibSurfaceCreateInfo* createInfo, gnSurface* surface);
|
||||||
|
#endif
|
||||||
@@ -4,6 +4,7 @@
|
|||||||
#include "stdlib.h"
|
#include "stdlib.h"
|
||||||
#include <vulkan/vulkan_core.h>
|
#include <vulkan/vulkan_core.h>
|
||||||
#include "vulkan_functions.h"
|
#include "vulkan_functions.h"
|
||||||
|
#include "string.h"
|
||||||
|
|
||||||
gnReturnCode vulkanCodeToGryphnCode(VkResult result) {
|
gnReturnCode vulkanCodeToGryphnCode(VkResult result) {
|
||||||
if (result != VK_SUCCESS) {
|
if (result != VK_SUCCESS) {
|
||||||
@@ -58,7 +59,19 @@ gnReturnCode initBackend(gnInstance instance, gnInstanceCreateInfo* info) {
|
|||||||
const char** extensions = malloc(sizeof(const char*) * info->enabledExtensionCount);
|
const char** extensions = malloc(sizeof(const char*) * info->enabledExtensionCount);
|
||||||
int realEnabledExtensionCount = 0;
|
int realEnabledExtensionCount = 0;
|
||||||
for (int i = 0; i < info->enabledExtensionCount; i++) {
|
for (int i = 0; i < info->enabledExtensionCount; i++) {
|
||||||
// zero supported vulkan extensions right now
|
if (strcmp(info->enabledExtensions[i], "GN_EXT_surface") == 0) {
|
||||||
|
extensions[realEnabledExtensionCount] = "VK_KHR_surface";
|
||||||
|
realEnabledExtensionCount++;
|
||||||
|
// instance->dispatchTable.destroySurface = metalDestroySurface;
|
||||||
|
// instance->dispatchTable.getSurfaceCapabilities = metalGetSurfaceCapabilities;
|
||||||
|
// instance->dispatchTable.getSurfaceFormats = metalGetSurfaceFormats;
|
||||||
|
// instance->dispatchTable.getSurfacePresentModes = metalGetSurfacePresentModes;
|
||||||
|
}
|
||||||
|
if (strcmp(info->enabledExtensions[i], "GN_EXT_surface_xlib") == 0) {
|
||||||
|
extensions[realEnabledExtensionCount] = "VK_KHR_xlib_surface";
|
||||||
|
realEnabledExtensionCount++;
|
||||||
|
// instance->dispatchTable.createMetalSurface = metalCreateSurface;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
VkInstanceCreateInfo createInfo = {
|
VkInstanceCreateInfo createInfo = {
|
||||||
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
|
#define GN_USE_SURFACE_XLIB
|
||||||
#include "Gryphn/gryphn.h"
|
#include "Gryphn/gryphn.h"
|
||||||
#include <iostream>
|
|
||||||
#include "stdlib.h"
|
#include "stdlib.h"
|
||||||
|
#include "iostream"
|
||||||
#define GLFW_EXPOSE_NATIVE_X11
|
#define GLFW_EXPOSE_NATIVE_X11
|
||||||
#include "glfw/include/GLFW/glfw3.h"
|
#include "glfw/include/GLFW/glfw3.h"
|
||||||
#include "glfw/include/GLFW/glfw3native.h"
|
#include "glfw/include/GLFW/glfw3native.h"
|
||||||
@@ -15,7 +16,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
GLFWwindow* window;
|
GLFWwindow* window;
|
||||||
CAMetalLayer* layer;
|
|
||||||
gnVersion version = gnCreateVersion(1, 0, 0);
|
gnVersion version = gnCreateVersion(1, 0, 0);
|
||||||
gnInstance instance;
|
gnInstance instance;
|
||||||
gnPhysicalDevice pysicalDevice;
|
gnPhysicalDevice pysicalDevice;
|
||||||
@@ -79,17 +79,12 @@ void createDevice() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void createSurface() {
|
void createSurface() {
|
||||||
// NSWindow* nswin = glfwGetCocoaWindow((GLFWwindow*)window);
|
gnXlibSurfaceCreateInfo createInfo = {
|
||||||
// NSView* view = [nswin contentView];
|
.dpy = glfwGetX11Display(),
|
||||||
// layer = [CAMetalLayer layer];
|
.window = glfwGetX11Window(window)
|
||||||
// [view setWantsLayer:YES];
|
};
|
||||||
// [view setLayer:layer];
|
|
||||||
// layer.contentsScale = [nswin backingScaleFactor];
|
|
||||||
|
|
||||||
// gnMetalSurfaceCreateInfo createInfo = {
|
CHECK(gnCreateXlibSurface(instance, &createInfo, &surface));
|
||||||
// .metalLayer = layer
|
|
||||||
// };
|
|
||||||
// CHECK(gnCreateMetalSurface(instance, &createInfo, &surface));
|
|
||||||
|
|
||||||
// gnSurfaceCapabilities capabilites;
|
// gnSurfaceCapabilities capabilites;
|
||||||
// gnGetSurfaceCapabilities(pysicalDevice, surface, &capabilites);
|
// gnGetSurfaceCapabilities(pysicalDevice, surface, &capabilites);
|
||||||
@@ -115,7 +110,7 @@ int main() {
|
|||||||
try {
|
try {
|
||||||
createInstance();
|
createInstance();
|
||||||
createDevice();
|
createDevice();
|
||||||
// createSurface();
|
createSurface();
|
||||||
// createSwapchain();
|
// createSwapchain();
|
||||||
while (!glfwWindowShouldClose(window)) {
|
while (!glfwWindowShouldClose(window)) {
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
@@ -125,7 +120,7 @@ int main() {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
glfwDestroyWindow(window);
|
glfwDestroyWindow(window);
|
||||||
// gnDestroySurface(instance, &surface);
|
gnDestroySurface(instance, &surface);
|
||||||
gnDestroyDevice(&device);
|
gnDestroyDevice(&device);
|
||||||
gnDestroyInstance(&instance);
|
gnDestroyInstance(&instance);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user