fix issue with mfb_set_viewport on macos x

This commit is contained in:
Carlos Aragones 2020-04-26 19:50:53 +02:00
parent d0dd063b8f
commit 78efec66c5
5 changed files with 25 additions and 23 deletions

View File

@ -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;

View File

@ -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 };

View File

@ -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];

View File

@ -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;

View File

@ -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);