Я в настоящее время работаю с SDL2. Я нахожусь на Mac OS и использую xCode. Я создал функцию для рисования линий с использованием случайно созданных точек. Однако, когда я пытаюсь отобразить строки, они отображаются только в подмножестве моего окна (верхний левый квадрат).Оказание в небольшой части моего окна
Вот мой код.
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);
}
Вот результат при компиляции. SDL window
Вы используете только VGA (640x480), и я поставил бы ваши настройки дисплея намного больше, чем ... Попробуйте использовать SDL_GetWindowSize (...), чтобы выбрать случайные числа из. – cleblanc
Я нашел эту функцию SDL_GL_GetDrawableSize, но я не уверен, как ее использовать с момента возврата типа void. –
Я подозреваю, что 'SDL_WINDOW_ALLOW_HIGHDPI' отбрасывает вас. Какие значения ['SDL_GetRendererOutputSize()'] (https://wiki.libsdl.org/SDL_GetRendererOutputSize) заполняют 'w' и' h' с помощью? – genpfault