2016-10-31 8 views
0

私は現在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

+0

あなたが唯一のVGA(640×480)を使用していると私はお使いのディスプレイの設定はそれよりもはるかに大きい賭けるだろう...あなたの乱数をから選択するSDL_GetWindowSize(...)を使用してみてください。 – cleblanc

+0

私はこの関数SDL_GL_GetDrawableSizeを見つけましたが、私はその戻り値の型からそれをどのように使用するか分かりません。 –

+0

私は 'SDL_WINDOW_ALLOW_HIGHDPI'があなたを捨てていると思います。 ['SDL_GetRendererOutputSize()'](https://wiki.libsdl.org/SDL_GetRendererOutputSize)は 'w'と' h'をどのような値にしますか? – genpfault

答えて

0

これらを定義することで、VGAサイズの画面しか使用できません。

#define SCREEN_WIDTH 640 
#define SCREEN_HEIGHT 480 

この

int SCREEN_WIDTH=640; 
int SCREEN_HEIGHT=480; 

を試してみて、このようなメインに追加します。

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); 

SDL_GL_GetDrawableSize(window,&SCREEN_WIDTH,&SCREEN_HEIGHT); 
+0

それは働いている!ありがとう –

+0

@PierrePasquetそれがあなたのために働く場合、答えを受け入れてください。 – cleblanc

関連する問題