Exemplo n.º 1
0
// Creating a new window.
Window::Window(std::string title, int width, int height, bool fullscreen) throw(HCException) {
    this->title      = title;
    this->width      = width;
    this->height     = height;
    this->fullscreen = fullscreen;

    if (SDL_Init(SDL_INIT_EVERYTHING) != 0)
        throw HCException("Failed to initialize SDL.\n", HC_WINDOW_EXCEPTION);

    this->window = SDL_CreateWindow(
        title.c_str(),
        SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
        width, height,
        fullscreen ? SDL_WINDOW_SHOWN | SDL_WINDOW_FULLSCREEN : SDL_WINDOW_SHOWN
    );

    if (this->window == nullptr) {
        SDL_Quit();
        throw HCException("Failed to open SDL window.\n", HC_WINDOW_EXCEPTION);
    }

    this->renderer = SDL_CreateRenderer(
        this->window,
        0,
        SDL_RENDERER_ACCELERATED
    );

    if (this->renderer == nullptr) {
        this->error = true;
        SDL_DestroyWindow(this->window);
        SDL_Quit();
        throw HCException("Failed to create SDL renderer.\n", HC_WINDOW_EXCEPTION);
    }
}
Exemplo n.º 2
0
void GlTexture::init(GLenum target, const Vec2i& size, int depth, GLenum internal_format, 
                   GLenum format, GLenum type, const void* ptr, GLenum minFilter, GLenum magFilter, GLenum wrap)
{
    if (m_obj != -1)
        destroy();

    m_target = target;
    glGenTextures(1, &m_obj);
    //printf(":%d\n", m_obj);
    glBindTexture(target, m_obj);
    mglCheckErrorsC("bind");
    if (target == GL_TEXTURE_2D)
    {
#ifdef QT_CORE_LIB
        // see http://www.opengl.org/wiki/Common_Mistakes        
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
#endif
        if (ptr != nullptr) {
            glTexImage2D(target, 0, internal_format, size.width, size.height, 0, format, type, ptr);
            mglCheckErrorsC("tex2d");
        }
    }
    else {
        throw HCException("texture not supported");
    }
    /*if (target == GL_TEXTURE_1D)
    {
        glTexImage1D(target, 0, internal_format, size.width, 0, format, type, ptr);
        mglCheckErrorsC("tex1d");
    }
    else if ((target == GL_TEXTURE_3D) || (target == GL_TEXTURE_2D_ARRAY_EXT))
    {
        glTexImage3D(target, 0, internal_format, size.width(), size.height(), depth, 0, format, type, ptr);
        mglCheckErrorsC("tex3d");
    }*/

    /*if (minFilter == GL_LINEAR_MIPMAP_LINEAR || minFilter == GL_NEAREST_MIPMAP_LINEAR ||
        minFilter == GL_LINEAR_MIPMAP_NEAREST || minFilter == GL_NEAREST_MIPMAP_NEAREST)
    {
        glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE);
    }*/

    glTexParameteri(target, GL_TEXTURE_MIN_FILTER, minFilter);
    glTexParameteri(target, GL_TEXTURE_MAG_FILTER, magFilter);
    glTexParameteri(target, GL_TEXTURE_WRAP_S, wrap);
    glTexParameteri(target, GL_TEXTURE_WRAP_T, wrap);
    //glTexParameteri(target, GL_TEXTURE_WRAP_R, wrap);

    m_size = Vec3i(size.width, size.height, depth);
    mglCheckErrorsC("texture");
}
Exemplo n.º 3
0
void HCError( int err_num, ... )
{
    ErrString   string = err_strings[err_num];
    va_list values;

    fputc( '\n', stderr );
    va_start( values, err_num );
    ErrorPrint( stderr, string, values );
    va_end( values );

    // Throw an exception to jump back to main().
    throw HCException();
}