Ich arbeite derzeit mit SDL2. Ich bin auf Mac OS und ich verwende xCode. Ich habe eine Funktion zum Zeichnen von Linien mit zufällig generierten Punkten erstellt. Wenn ich jedoch versuche, die Linien zu rendern, werden sie nur in einer Teilmenge meines Fensters (oben links) gerendert.Rendering in einem kleinen Abschnitt meines Fensters
Hier ist mein Code.
main.c
#include <SDL2/SDL.h>
#include "utils.h"
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
// Prototypes
void drawRandomPoints(int pointsNo, SDL_Renderer *renderer);
void drawRandomLines(int linesNo, SDL_Renderer *renderer);
int main(int argc, const char * argv[]) {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window *window = SDL_CreateWindow("Hello World", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_OPENGL);
SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
int running = 1;
SDL_Event event;
while(running) {
while(SDL_PollEvent(&event)) {
if(event.type == SDL_QUIT) {
running = 0;
}
}
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
// Draw a point
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
drawRandomLines(100, renderer);
SDL_RenderPresent(renderer);
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
void drawRandomPoints(int pointsNo, SDL_Renderer *renderer) {
int i = 0;
for(i = 0; i < pointsNo; ++i) {
SDL_SetRenderDrawColor(renderer, getRandomColor(), getRandomColor(), getRandomColor(), 255);
SDL_RenderDrawPoint(renderer, getRandomNumber(0, SCREEN_WIDTH), getRandomNumber(0, SCREEN_HEIGHT));
}
}
void drawRandomLines(int linesNo, SDL_Renderer *renderer) {
int i = 0;
for(i = 0; i < linesNo; ++i) {
SDL_SetRenderDrawColor(renderer, getRandomColor(), getRandomColor(), getRandomColor(), 255);
SDL_RenderDrawLine(renderer, getRandomNumber(0, SCREEN_WIDTH), getRandomNumber(0, SCREEN_HEIGHT), getRandomNumber(0, SCREEN_WIDTH), getRandomNumber(0, SCREEN_HEIGHT));
}
}
utils.c
#include "utils.h"
#include <stdlib.h>
#include <time.h>
int getRandomNumber(int min, int max) {
static int init = 0;
if(!init) {
srand(time(NULL));
init = 1;
}
return (rand() % (max - min + 1)) + min;
}
int getRandomColor() {
return getRandomNumber(0, 255);
}
Hier ist das Ergebnis beim Kompilieren. SDL window
Sie sind nur VGA verwenden (640x480) und ich würde Ihre Anzeigeeinstellungen sind viel größer als die Wette ... Versuchen SDL_GetWindowSize mit (...) aus dem Zufallszahlen holen. – cleblanc
Ich habe diese Funktion SDL_GL_GetDrawableSize gefunden, aber ich bin mir nicht sicher, wie Sie es verwenden, da es ein void Rückgabetyp ist. –
Ich vermute, 'SDL_WINDOW_ALLOW_HIGHDPI' wirft dich ab. Welche Werte füllt ['SDL_GetRendererOutputSize()'] (https://wiki.libsdl.org/SDL_GetRendererOutputSize) 'w' und' h' mit? – genpfault