Jump to content
  • Advertisement
CodeBro1

SDL2 isn't drawing rectangles in Mac environment

Recommended Posts

I can't get SDL to make any rectangles on my Mac. The program I wrote worked completely fine on a Windows computer, but whenever I call the SDL_FillRect function on my Mac, nothing appears on the screen. I suspect this may be caused by a compilation issue. I'm using SDL through Frameworks. Inserted below is my terminal command and my code:

g++ example.cpp -I/Library/Frameworks/SDL2.framework/Headers -F/Library/Frameworks -framework SDL2
	#include <SDL2/SDL.h>
#include <iostream>
#include <stdio.h>
	const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int PLAYER_WIDTH = 20;
const int PLAYER_HEIGHT = 20;
SDL_Window* w = NULL;
SDL_Surface* s = NULL;
SDL_Renderer* r = NULL;
SDL_Rect BG = {0,0,SCREEN_WIDTH,SCREEN_HEIGHT};
	 
	bool init() {
	    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        printf("Couldn't initialize. error: %s\n", SDL_GetError() );
        return false;
    } else {
	        w = SDL_CreateWindow("test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
	
        if(w == NULL) {
            printf("Couldn't make window. error:%s\n", SDL_GetError() );
            return false;
        } else {
            s = SDL_GetWindowSurface(w);
            r = SDL_CreateRenderer(w,-1,SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
            SDL_SetRenderDrawColor(r,0,0,0,0);
            return true;
        }
	    }
	}
	void close() {
    SDL_FreeSurface(s);
    SDL_DestroyWindow(w);
    SDL_DestroyRenderer(r);
    SDL_Quit();
	}
	class Player {
	    private:
        int x;
        int y;
        int xvel;
        int yvel;
        int acceleration;
        SDL_Rect collider;
	
    public:
	        bool landed;
	        Player() {
            x = 0;
            y = SCREEN_HEIGHT - PLAYER_HEIGHT;
            xvel = 0;
            yvel = 0;
            acceleration = -1;
            collider.x = x;
            collider.y = y;
            collider.w = PLAYER_WIDTH;
            collider.h = PLAYER_HEIGHT;            
            landed = true;
        }
	        int getx() {
            return x;
        }
	        int gety() {
            return y;
        }
	        void setx(int num) {
            x = num;
        }
	        void sety(int num) {
            y = num;
        }
	        void setyvel(int num) {
            yvel += num;
        }
	        void setxvel(int num) {
            xvel += num;
        }
	        void move() {
            x += xvel;
	            if( (y + PLAYER_HEIGHT) > SCREEN_HEIGHT) {
                
                y = SCREEN_HEIGHT - PLAYER_HEIGHT;
                yvel = 0;
                landed = true;
	            } else {
                if(landed != true) { //so sorry for the bad code, this was the only idea i had to debug "bouncing" of the player
                    y += yvel;
                    yvel = yvel - acceleration;
                }
                
            }
	            
            collider.x = x;
            collider.y = y;
        }
	        void render() {
            SDL_SetRenderDrawColor(r,255,255,255,255);
            SDL_RenderFillRect(r,&collider);
            SDL_SetRenderDrawColor(r,0,0,0,255);
        }
};
	
int main(int argc, char *argv[]) {
	bool quit = false;
SDL_Event e; //event for event polling
Player p;
int count = 0;
	    if(init() == false) {
	        printf("Init failed: %s\n", SDL_GetError());
	    } else {
        while(quit == false ) {
            while( SDL_PollEvent(&e) != 0) {
	                if(e.type == SDL_QUIT) {
                    quit = true;
                }
	
                
                if(e.type == SDL_KEYDOWN) {
	                    switch(e.key.keysym.sym) {
	                        case SDLK_LEFT: if(e.key.repeat == 0) { p.setxvel(-10); }
                        break;
	                        case SDLK_RIGHT: if(e.key.repeat == 0) { p.setxvel(10); }
                        break;
	                        case SDLK_UP:
	                        if(count < 5) {
                            p.setyvel(-3);
                            ++count;
                            }
                            p.landed = false;
                        
                        break;
	                    }
	                }
	                
	                if(e.type == SDL_KEYUP && e.key.repeat == 0) {
	                    switch(e.key.keysym.sym) {
	                        case SDLK_LEFT: p.setxvel(10);
                        break;
	                        case SDLK_RIGHT: p.setxvel(-10);
                        break;
	                        case SDLK_UP: count = 0;
                        break;
	                    }
	                }
	                
	            }
	            SDL_RenderClear(r);
            SDL_RenderFillRect(r,&BG);
            p.move();
            p.render();
            
	            SDL_RenderPresent(r);
        }
    }
	    close();

Please help me to get it working, I have no idea what's going on. I have SDL 2.0.7 and my Mac is OS X 10.10.3.

Share this post


Link to post
Share on other sites
Advertisement

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!