Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: OpenGL piirto ongelma

mika132 [26.10.2010 23:17:27]

#

Eli yritän saada kuvaa tulostumaan OpenGL käyttäen näyttöön, mutta en jostain syystä onnistu siinä.

Luin tuota ohjelmointiputkan opasta, mutta siellä ei kerrottu noin tiedostosta kuvan lataamista vaan siellä se tehtiin muistaakseni ja käsittääkseni koodilla. Miten saan tuon kuvan jota yritän piirtää tulostumaan.

Piirto / lataus tapahtuu siist StartGame funktiossa. Oikeastihan tarkoitus on vain ladata kuvat siinä, mutta tämä on vain testaamista vasta, että saanko OpenGL toimimaan.

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL.h>
#include <SDL_opengl.h>
#include "data/game.hpp"

int main(int argc, char *argv[]) {

    if( SDL_Init(SDL_INIT_VIDEO) < 0 )
    {
        fprintf(stderr, "SDL:n alustus ei onnistunut: %s\n", SDL_GetError());
        return 0;
    }

    Game::StartGame();

    SDL_Delay(5000);

    SDL_Quit();
    return 0;
}
//game.h
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL.h>
#include <SDL_opengl.h>


namespace Game {
    static SDL_Surface * ruutu;
    static int LEVEYS = 800;
    static int KORKEUS = 600;
    static int BITTI = 32;
    static void StartGame();
    static void piirra_kuva(SDL_Surface *kuva, int x, int y, bool keskikohta = false);
    namespace Photos {
        static SDL_Surface *lataa(const char *nimi, bool lapinakyva);
        static SDL_Surface *Photo_1;
    }
}

void Game::StartGame() {
    SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 32);
    SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 32);
    SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 32);
    SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 32);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    ruutu = SDL_SetVideoMode(Game::LEVEYS, Game::KORKEUS, Game::BITTI, SDL_OPENGL);

    Photos::Photo_1 = Photos::lataa("data/grafiikka/punanen.bmp", false);

    piirra_kuva(Photos::Photo_1, 50,50,false);
    SDL_GL_SwapBuffers();
}
static SDL_Surface *Game::Photos::lataa(const char *nimi, bool lapinakyva) {
    if (SDL_Surface *tmp = SDL_LoadBMP(nimi)) {
        if (lapinakyva) {
            SDL_SetColorKey(tmp, SDL_SRCCOLORKEY, SDL_MapRGB(tmp->format, 255, 0, 255));
        }
        if (SDL_Surface *opti = SDL_DisplayFormat(tmp)) {
            SDL_FreeSurface(tmp);
            tmp = opti;
        }
        return tmp;
    }
}
static void Game::piirra_kuva(SDL_Surface *kuva, int x, int y, bool keskikohta) {
    SDL_Rect r = {x, y};
    if (keskikohta) {
        r.x -= kuva->w / 2;
        r.y -= kuva->h / 2;
    }
    SDL_BlitSurface(kuva, 0, ruutu, &r);
}

Metabolix [26.10.2010 23:20:40]

#

Jos käytät OpenGL:ää, et voi piirtää SDL:n piirtofunktioilla. Lue jokin OpenGL-opas tai katso edes kirjoittamiani oppaita SDL:n ja OpenGL:n yhteiskäytöstä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta