fix issue with mfb_set_viewport on macos x
This commit is contained in:
parent
d0dd063b8f
commit
78efec66c5
@ -21,13 +21,6 @@ void init_keycodes();
|
||||
id<MTLDevice> g_metal_device = nil;
|
||||
id<MTLLibrary> g_library = nil;
|
||||
|
||||
Vertex g_vertices[4] = {
|
||||
{-1.0, -1.0, 0, 1},
|
||||
{-1.0, 1.0, 0, 1},
|
||||
{ 1.0, -1.0, 0, 1},
|
||||
{ 1.0, 1.0, 0, 1},
|
||||
};
|
||||
|
||||
//-------------------------------------
|
||||
#define kShader(inc, src) @inc#src
|
||||
|
||||
@ -185,6 +178,14 @@ mfb_open_ex(const char *title, unsigned width, unsigned height, unsigned flags)
|
||||
if (!window_data->draw_buffer)
|
||||
return 0x0;
|
||||
|
||||
static Vertex s_vertices[4] = {
|
||||
{-1.0, -1.0, 0, 1},
|
||||
{-1.0, 1.0, 0, 1},
|
||||
{ 1.0, -1.0, 0, 1},
|
||||
{ 1.0, 1.0, 0, 1},
|
||||
};
|
||||
memcpy(window_data_osx->metal.vertices, s_vertices, sizeof(s_vertices));
|
||||
|
||||
// Setup command queue
|
||||
window_data_osx->metal.command_queue = [g_metal_device newCommandQueue];
|
||||
|
||||
@ -431,17 +432,19 @@ mfb_set_viewport(struct mfb_window *window, unsigned offset_x, unsigned offset_y
|
||||
float y1 = ((float) offset_y / window_data->window_height) * 2.0f - 1.0f;
|
||||
float y2 = (((float) offset_y + height) / window_data->window_height) * 2.0f - 1.0f;
|
||||
|
||||
g_vertices[0].x = x1;
|
||||
g_vertices[0].y = y1;
|
||||
SWindowData_OSX *window_data_osx = (SWindowData_OSX *) window_data->specific;
|
||||
|
||||
g_vertices[1].x = x1;
|
||||
g_vertices[1].y = y2;
|
||||
window_data_osx->metal.vertices[0].x = x1;
|
||||
window_data_osx->metal.vertices[0].y = y1;
|
||||
|
||||
g_vertices[2].x = x2;
|
||||
g_vertices[2].y = y1;
|
||||
window_data_osx->metal.vertices[1].x = x1;
|
||||
window_data_osx->metal.vertices[1].y = y2;
|
||||
|
||||
g_vertices[3].x = x2;
|
||||
g_vertices[3].y = y2;
|
||||
window_data_osx->metal.vertices[2].x = x2;
|
||||
window_data_osx->metal.vertices[2].y = y1;
|
||||
|
||||
window_data_osx->metal.vertices[3].x = x2;
|
||||
window_data_osx->metal.vertices[3].y = y2;
|
||||
#endif
|
||||
|
||||
return true;
|
||||
|
@ -5,10 +5,6 @@
|
||||
#if defined(USE_METAL_API)
|
||||
#import <MetalKit/MetalKit.h>
|
||||
|
||||
typedef struct Vertex {
|
||||
float x, y, z, w;
|
||||
} Vertex;
|
||||
|
||||
// Number of textures in flight (tripple buffered)
|
||||
enum { MaxBuffersInFlight = 3 };
|
||||
|
||||
|
@ -9,8 +9,6 @@
|
||||
extern id<MTLDevice> g_metal_device;
|
||||
extern id<MTLLibrary> g_library;
|
||||
|
||||
extern Vertex g_vertices[4];
|
||||
|
||||
@implementation WindowViewController
|
||||
|
||||
- (void) mtkView:(nonnull MTKView *)view drawableSizeWillChange:(CGSize)size {
|
||||
@ -69,7 +67,7 @@ extern Vertex g_vertices[4];
|
||||
SWindowData_OSX *window_data_osx = (SWindowData_OSX *) window->window_data->specific;
|
||||
[renderEncoder setRenderPipelineState:window_data_osx->metal.pipeline_state];
|
||||
|
||||
[renderEncoder setVertexBytes:g_vertices length:sizeof(g_vertices) atIndex:0];
|
||||
[renderEncoder setVertexBytes:window_data_osx->metal.vertices length:sizeof(window_data_osx->metal.vertices) atIndex:0];
|
||||
|
||||
[renderEncoder setFragmentTexture:texture_buffers[current_buffer] atIndex:0];
|
||||
|
||||
|
@ -9,6 +9,10 @@
|
||||
|
||||
@class OSXWindow;
|
||||
|
||||
typedef struct Vertex {
|
||||
float x, y, z, w;
|
||||
} Vertex;
|
||||
|
||||
typedef struct {
|
||||
OSXWindow *window;
|
||||
struct mfb_timer *timer;
|
||||
@ -17,6 +21,7 @@ typedef struct {
|
||||
struct {
|
||||
id<MTLCommandQueue> command_queue;
|
||||
id<MTLRenderPipelineState> pipeline_state;
|
||||
Vertex vertices[4];
|
||||
} metal;
|
||||
#endif
|
||||
} SWindowData_OSX;
|
||||
|
@ -107,7 +107,7 @@ main()
|
||||
mfb_set_mouse_scroll_callback(window_a, mouse_scroll);
|
||||
|
||||
mfb_set_user_data(window_a, (void *) "Window A");
|
||||
mfb_set_viewport(window_a, 25, 25, WIDTH_A-25, HEIGHT_A-25);
|
||||
mfb_set_viewport(window_a, 25, 25, WIDTH_A-50, HEIGHT_A-50);
|
||||
|
||||
//--
|
||||
struct mfb_window *window_b = mfb_open_ex("Secondary Window", WIDTH_B, HEIGHT_B, WF_RESIZABLE);
|
||||
|
Loading…
Reference in New Issue
Block a user