Skip to content

Commit

Permalink
Changing to Single Dispatch Per Pass. Day 478.
Browse files Browse the repository at this point in the history
  • Loading branch information
itfrombit committed Sep 20, 2018
1 parent 4d1341a commit 8b65138
Show file tree
Hide file tree
Showing 6 changed files with 151 additions and 73 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ osx_handmade

A port of Handmade Hero (http://handmadehero.org) for OS X.

This repository works with Casey's source code from Day 476.
This repository works with Casey's source code from Day 478.

If you are compiling for the first time, you might want to
skip down to the [Compiling and Running](#compiling-and-running)
Expand Down
8 changes: 1 addition & 7 deletions code/osx_handmade.h
Original file line number Diff line number Diff line change
Expand Up @@ -269,18 +269,12 @@ typedef struct osx_game_data
umm CurrentClipMemorySize;
void* ClipMemory;

u32 PushBufferSize;
u8* PushBuffer;

u32 MaxVertexCount;
textured_vertex* VertexArray;
renderer_texture* BitmapArray;

texture_op TextureQueueMemory[512];
//texture_op TextureQueueMemory[256];
u32 TextureOpCount;
renderer_texture_queue TextureQueue;
u32 MaxQuadCountPerFrame;
u32 MaxTextureCount;
platform_renderer* Renderer;


Expand Down
19 changes: 4 additions & 15 deletions code/osx_handmade_game.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,10 @@ void OSXSetupGameData(NSWindow* Window, osx_game_data* GameData)


GameData->MaxQuadCountPerFrame = (1 << 18);
GameData->Renderer = OSXInitDefaultRenderer(Window, GameData->MaxQuadCountPerFrame);
GameData->MaxTextureCount = 256;
GameData->Renderer = OSXInitDefaultRenderer(Window,
GameData->MaxQuadCountPerFrame,
GameData->MaxTextureCount);


///////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -158,20 +161,6 @@ void OSXSetupGameData(NSWindow* Window, osx_game_data* GameData)
///////////////////////////////////////////////////////////////////
// Set up memory
//
//ZeroStruct(GameData->FrameTempArena);
//ZeroStruct(GameData->GameMemory);

GameData->PushBufferSize = Megabytes(64);
GameData->PushBuffer = OSXAllocateMemory(GameData->PushBufferSize,
PlatformMemory_NotRestored)->Base;

GameData->MaxVertexCount = 65536;
GameData->VertexArray = (textured_vertex*)OSXAllocateMemory(GameData->MaxVertexCount * sizeof(textured_vertex),
PlatformMemory_NotRestored)->Base;

GameData->BitmapArray = (renderer_texture*)OSXAllocateMemory(GameData->MaxVertexCount * sizeof(renderer_texture),
PlatformMemory_NotRestored)->Base;


#if HANDMADE_INTERNAL
char* RequestedAddress = (char*)Gigabytes(8);
Expand Down
23 changes: 19 additions & 4 deletions code/osx_handmade_opengl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ typedef void type_glDrawBuffers(GLsizei n, const GLenum* bufs);

typedef void type_glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);

typedef void type_glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
typedef void type_glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex);

global gl_tex_image_2d_multisample *glTexImage2DMultisample;
global gl_bind_framebuffer* glBindFramebuffer;
Expand Down Expand Up @@ -68,6 +70,9 @@ OpenGLGlobalFunction(glGenVertexArrays);
OpenGLGlobalFunction(glDeleteFramebuffers);
OpenGLGlobalFunction(glVertexAttribIPointer);

OpenGLGlobalFunction(glTexStorage3D);
OpenGLGlobalFunction(glDrawElementsBaseVertex);

//OpenGLGlobalFunction(glDrawBuffers);


Expand Down Expand Up @@ -169,14 +174,20 @@ RENDERER_END_FRAME(OSXOpenGLEndFrame)
#endif
}

internal open_gl* OSXInitOpenGL(u32 MaxQuadCountPerFrame)
internal open_gl* OSXInitOpenGL(u32 MaxQuadCountPerFrame, u32 MaxTextureCount)
{
open_gl* OpenGL = (open_gl*)OSXRendererAlloc(sizeof(open_gl));

OpenGL->Header.ProcessTextureQueue = OSXOpenGLProcessTextureQueue;
OpenGL->Header.BeginFrame = OSXOpenGLBeginFrame;
OpenGL->Header.EndFrame = OSXOpenGLEndFrame;

u32 MaxVertexCount = MaxQuadCountPerFrame * 4;
u32 MaxIndexCount = MaxQuadCountPerFrame * 6;
OpenGL->MaxTextureCount = MaxTextureCount;
OpenGL->MaxVertexCount = MaxVertexCount;
OpenGL->MaxIndexCount = MaxIndexCount;

void* Image = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY);
if (Image)
{
Expand All @@ -197,6 +208,10 @@ internal open_gl* OSXInitOpenGL(u32 MaxQuadCountPerFrame)

OSXGetOpenGLFunction(Image, glDeleteFramebuffers);
OSXGetOpenGLFunction(Image, glVertexAttribIPointer);

OSXGetOpenGLFunction(Image, glTexStorage3D);
OSXGetOpenGLFunction(Image, glDrawElementsBaseVertex);

#if 0
glAttachShader = (gl_attach_shader *)dlsym("glAttachShader");
glCompileShader = (gl_compile_shader *)dlsym("glCompileShader");
Expand Down Expand Up @@ -252,10 +267,9 @@ internal open_gl* OSXInitOpenGL(u32 MaxQuadCountPerFrame)
printf("Could not dynamically load OpenGL\n");
}

u32 MaxVertexCount = MaxQuadCountPerFrame * 4;
OpenGL->MaxVertexCount = MaxVertexCount;
OpenGL->VertexArray = (textured_vertex*)OSXRendererAlloc(MaxVertexCount *
sizeof(textured_vertex));
OpenGL->IndexArray = (u16*)OSXRendererAlloc(MaxIndexCount * sizeof(u16));
OpenGL->BitmapArray = (renderer_texture*)OSXRendererAlloc(MaxVertexCount *
sizeof(renderer_texture));

Expand All @@ -268,7 +282,8 @@ extern "C"
OSX_LOAD_RENDERER_ENTRY()
{
OSXInitOpenGLView(Window);
platform_renderer* Result = (platform_renderer*)OSXInitOpenGL(MaxQuadCountPerFrame);
platform_renderer* Result = (platform_renderer*)OSXInitOpenGL(MaxQuadCountPerFrame,
MaxTextureCount);

return Result;
}
Expand Down
9 changes: 6 additions & 3 deletions code/osx_handmade_renderer.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#define OSX_LOAD_RENDERER(name) platform_renderer* name(NSWindow* Window, u32 MaxQuadCountPerFrame)
#define OSX_LOAD_RENDERER(name) platform_renderer* name(NSWindow* Window, u32 MaxQuadCountPerFrame, u32 MaxTextureCount)
typedef OSX_LOAD_RENDERER(osx_load_renderer);
#define OSX_LOAD_RENDERER_ENTRY() OSX_LOAD_RENDERER(OSXLoadRenderer)

Expand All @@ -12,7 +12,8 @@ internal osx_load_renderer* OSXLoadRendererDylib(const char* Filename)


internal platform_renderer* OSXInitDefaultRenderer(NSWindow* Window,
u32 MaxQuadCountPerFrame)
u32 MaxQuadCountPerFrame,
u32 MaxTextureCount)
{
osx_load_renderer* OSXLoadOpenGLRenderer = OSXLoadRendererDylib("libhandmade_opengl.dylib");

Expand All @@ -23,7 +24,9 @@ internal platform_renderer* OSXInitDefaultRenderer(NSWindow* Window,
exit(1);
}

platform_renderer* Renderer = OSXLoadOpenGLRenderer(Window, MaxQuadCountPerFrame);
platform_renderer* Renderer = OSXLoadOpenGLRenderer(Window,
MaxQuadCountPerFrame,
MaxTextureCount);

return Renderer;
}
Expand Down
Loading

0 comments on commit 8b65138

Please sign in to comment.