Template
ininial commit
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
CC := gcc
|
||||
LIBS := `pkg-config --libs sdl2`
|
||||
INC := `pkg-config --cflags sdl2`
|
||||
SRC := src/main.c
|
||||
OUT := build/main
|
||||
|
||||
build: $(SRC)
|
||||
$(CC) -o $(OUT) $< $(INC) $(LIBS)
|
||||
|
||||
run: build
|
||||
$(OUT)
|
||||
|
||||
.PHONY: build run
|
||||
Executable
BIN
Binary file not shown.
+87
@@ -0,0 +1,87 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <SDL2/SDL.h>
|
||||
#include <SDL2/SDL_events.h>
|
||||
|
||||
#define WIDTH 320
|
||||
#define HEIGHT 200
|
||||
|
||||
uint32_t framebuffer[WIDTH * HEIGHT];
|
||||
|
||||
void put_pixel(unsigned int x, unsigned int y, uint32_t color) {
|
||||
framebuffer[WIDTH * y + x] = color;
|
||||
}
|
||||
|
||||
int main() {
|
||||
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
|
||||
fprintf(stderr, "SDL_Init failed! %s\n", SDL_GetError());
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
SDL_Window *window;
|
||||
SDL_Renderer *renderer;
|
||||
SDL_Texture *texture;
|
||||
SDL_Event event;
|
||||
bool is_running = true;
|
||||
|
||||
window = SDL_CreateWindow(
|
||||
"SDL Framebuffer", 0, 0,
|
||||
WIDTH, HEIGHT, 0
|
||||
);
|
||||
if (window == NULL) {
|
||||
fprintf(stderr, "SDL_CreateWindow failed! %s\n", SDL_GetError());
|
||||
SDL_Quit();
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
renderer = SDL_CreateRenderer(window, 0, 0);
|
||||
if (renderer == NULL) {
|
||||
fprintf(stderr, "SDL_CreateRenderer failed! %s\n", SDL_GetError());
|
||||
SDL_DestroyWindow(window);
|
||||
SDL_Quit();
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
texture = SDL_CreateTexture(
|
||||
renderer, SDL_PIXELFORMAT_XRGB8888,
|
||||
SDL_TEXTUREACCESS_STREAMING,
|
||||
WIDTH, HEIGHT
|
||||
);
|
||||
if (texture == NULL) {
|
||||
fprintf(stderr, "SDL_CreateTexture failed! %s\n", SDL_GetError());
|
||||
SDL_DestroyWindow(window);
|
||||
SDL_DestroyRenderer(renderer);
|
||||
SDL_Quit();
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 20; i++) {
|
||||
for (int j = 0; j < 20; j++) {
|
||||
put_pixel(i, j, 0x00FF00);
|
||||
}
|
||||
}
|
||||
|
||||
while (is_running) {
|
||||
while (SDL_PollEvent(&event)) {
|
||||
if (event.type == SDL_QUIT) {
|
||||
is_running = false;
|
||||
}
|
||||
}
|
||||
|
||||
SDL_UpdateTexture(texture, NULL, framebuffer, WIDTH * sizeof(uint32_t));
|
||||
|
||||
SDL_RenderClear(renderer);
|
||||
SDL_RenderCopy(renderer, texture, NULL, NULL);
|
||||
SDL_RenderPresent(renderer);
|
||||
}
|
||||
|
||||
SDL_DestroyTexture(texture);
|
||||
SDL_DestroyRenderer(renderer);
|
||||
SDL_DestroyWindow(window);
|
||||
|
||||
SDL_Quit();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
Reference in New Issue
Block a user