Draw Things
This commit is contained in:
		
							parent
							
								
									a4b81c2603
								
							
						
					
					
						commit
						addff55c24
					
				
							
								
								
									
										35
									
								
								game.c
								
								
								
								
							
							
						
						
									
										35
									
								
								game.c
								
								
								
								
							| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
#include <assets.h>
 | 
					#include <assets.h>
 | 
				
			||||||
#include <game.h>
 | 
					#include <game.h>
 | 
				
			||||||
#include <SDL2/SDL.h>
 | 
					#include <SDL2/SDL.h>
 | 
				
			||||||
 | 
					#include <stdbool.h>
 | 
				
			||||||
#include <time.h>
 | 
					#include <time.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int sleepNanos(long int ns) {
 | 
					int sleepNanos(long int ns) {
 | 
				
			||||||
| 
						 | 
					@ -10,24 +11,52 @@ int sleepNanos(long int ns) {
 | 
				
			||||||
    return nanosleep(&time, NULL);
 | 
					    return nanosleep(&time, NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MAX_STEP_CLOCKS 20000
 | 
					typedef struct {
 | 
				
			||||||
 | 
					    GraphicsContext *gfx;
 | 
				
			||||||
 | 
					} GameState;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int onFrame(VB *sim) {
 | 
				
			||||||
 | 
					    static uint8_t leftEye[384*224];
 | 
				
			||||||
 | 
					    static uint8_t rightEye[384*224];
 | 
				
			||||||
 | 
					    GameState *state;
 | 
				
			||||||
 | 
					    GraphicsContext *gfx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    state = vbGetUserData(sim);
 | 
				
			||||||
 | 
					    gfx = state->gfx;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    vbGetPixels(sim, leftEye, 1, 384, rightEye, 1, 384);
 | 
				
			||||||
 | 
					    gfxUpdateLeftEye(gfx, leftEye);
 | 
				
			||||||
 | 
					    gfxUpdateRightEye(gfx, rightEye);
 | 
				
			||||||
 | 
					    gfxRender(gfx);
 | 
				
			||||||
 | 
					    return 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MAX_STEP_CLOCKS 20000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int runGame(VB *sim, GraphicsContext *gfx) {
 | 
					int runGame(VB *sim, GraphicsContext *gfx) {
 | 
				
			||||||
    uint32_t clocks;
 | 
					    uint32_t clocks;
 | 
				
			||||||
    SDL_Event event;
 | 
					    SDL_Event event;
 | 
				
			||||||
 | 
					    GameState state;
 | 
				
			||||||
 | 
					    uint64_t ticks, prevTicks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    state.gfx = gfx;
 | 
				
			||||||
 | 
					    vbSetUserData(sim, &state);
 | 
				
			||||||
 | 
					    vbSetFrameCallback(sim, &onFrame);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    gfxUpdateLeftEye(gfx, LEFT_EYE_DEFAULT);
 | 
					    gfxUpdateLeftEye(gfx, LEFT_EYE_DEFAULT);
 | 
				
			||||||
    gfxUpdateRightEye(gfx, RIGHT_EYE_DEFAULT);
 | 
					    gfxUpdateRightEye(gfx, RIGHT_EYE_DEFAULT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    prevTicks = SDL_GetTicks64();
 | 
				
			||||||
    while (1) {
 | 
					    while (1) {
 | 
				
			||||||
        clocks = MAX_STEP_CLOCKS;
 | 
					        clocks = MAX_STEP_CLOCKS;
 | 
				
			||||||
        vbEmulate(sim, &clocks);
 | 
					        vbEmulate(sim, &clocks);
 | 
				
			||||||
        gfxRender(gfx);
 | 
					        ticks = SDL_GetTicks64();
 | 
				
			||||||
        while (SDL_PollEvent(&event)) {
 | 
					        while (SDL_PollEvent(&event)) {
 | 
				
			||||||
            if (event.type == SDL_QUIT) {
 | 
					            if (event.type == SDL_QUIT) {
 | 
				
			||||||
                return 0;
 | 
					                return 0;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        sleepNanos((MAX_STEP_CLOCKS - clocks) * 50);
 | 
					        sleepNanos(((MAX_STEP_CLOCKS - clocks) * 50) - (ticks - prevTicks) * 1000);
 | 
				
			||||||
 | 
					        prevTicks = ticks;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,14 +40,14 @@ int gfxInit(GraphicsContext *gfx) {
 | 
				
			||||||
        fprintf(stderr, "Error creating left eye texture: %s\n", SDL_GetError());
 | 
					        fprintf(stderr, "Error creating left eye texture: %s\n", SDL_GetError());
 | 
				
			||||||
        goto cleanup_window;
 | 
					        goto cleanup_window;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    SDL_SetTextureColorMod(gfx->leftEye, 255, 0, 0);
 | 
					    SDL_SetTextureColorMod(gfx->leftEye, 0xff, 0, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    gfx->rightEye = SDL_CreateTexture(gfx->renderer, SDL_PIXELFORMAT_RGB24, SDL_TEXTUREACCESS_STREAMING, 384, 224);
 | 
					    gfx->rightEye = SDL_CreateTexture(gfx->renderer, SDL_PIXELFORMAT_RGB24, SDL_TEXTUREACCESS_STREAMING, 384, 224);
 | 
				
			||||||
    if (!gfx->rightEye) {
 | 
					    if (!gfx->rightEye) {
 | 
				
			||||||
        fprintf(stderr, "Error creating left eye texture: %s\n", SDL_GetError());
 | 
					        fprintf(stderr, "Error creating left eye texture: %s\n", SDL_GetError());
 | 
				
			||||||
        goto cleanup_left_eye;
 | 
					        goto cleanup_left_eye;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    SDL_SetTextureColorMod(gfx->rightEye, 0, 0, 255);
 | 
					    SDL_SetTextureColorMod(gfx->rightEye, 0, 0xc6, 0xf0);
 | 
				
			||||||
    SDL_SetTextureBlendMode(gfx->rightEye, SDL_BLENDMODE_ADD);
 | 
					    SDL_SetTextureBlendMode(gfx->rightEye, SDL_BLENDMODE_ADD);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										1
									
								
								makefile
								
								
								
								
							
							
						
						
									
										1
									
								
								makefile
								
								
								
								
							| 
						 | 
					@ -15,4 +15,5 @@ build:
 | 
				
			||||||
		$(SHROOMSFLAGS) $(SDL2FLAGS) \
 | 
							$(SHROOMSFLAGS) $(SDL2FLAGS) \
 | 
				
			||||||
		-D POSIX_C_SOURCE=199309L \
 | 
							-D POSIX_C_SOURCE=199309L \
 | 
				
			||||||
		-o shrooms-vb \
 | 
							-o shrooms-vb \
 | 
				
			||||||
 | 
							-O3 -fno-strict-aliasing \
 | 
				
			||||||
		-Werror -std=c90 -Wall -Wextra -Wpedantic
 | 
							-Werror -std=c90 -Wall -Wextra -Wpedantic
 | 
				
			||||||
| 
						 | 
					@ -1 +1 @@
 | 
				
			||||||
Subproject commit 767675eb42254613170e937b5b67bd9c109a9cf8
 | 
					Subproject commit 37b9a943384a230b93089b7617d1b3f5344480d7
 | 
				
			||||||
		Loading…
	
		Reference in New Issue