현재 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