私は現在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(640×480)を使用していると私はお使いのディスプレイの設定はそれよりもはるかに大きい賭けるだろう...あなたの乱数をから選択するSDL_GetWindowSize(...)を使用してみてください。 – cleblanc
私はこの関数SDL_GL_GetDrawableSizeを見つけましたが、私はその戻り値の型からそれをどのように使用するか分かりません。 –
私は 'SDL_WINDOW_ALLOW_HIGHDPI'があなたを捨てていると思います。 ['SDL_GetRendererOutputSize()'](https://wiki.libsdl.org/SDL_GetRendererOutputSize)は 'w'と' h'をどのような値にしますか? – genpfault