Ejemplo n.º 1
0
void VideoEngine::DrawGrid(float x, float y, float x_step, float y_step, const Color &c)
{
    PushState();

    Move(0, 0);

    float x_max = _current_context.coordinate_system.GetRight();
    float y_max = _current_context.coordinate_system.GetBottom();

    std::vector<GLfloat> vertices;
    int32 num_vertices = 0;
    for(; x <= x_max; x += x_step) {
        vertices.push_back(x);
        vertices.push_back(_current_context.coordinate_system.GetBottom());
        vertices.push_back(x);
        vertices.push_back(_current_context.coordinate_system.GetTop());
        num_vertices += 2;
    }
    for(; y < y_max; y += y_step) {
        vertices.push_back(_current_context.coordinate_system.GetLeft());
        vertices.push_back(y);
        vertices.push_back(_current_context.coordinate_system.GetRight());
        vertices.push_back(y);
        num_vertices += 2;
    }
    glColor4fv(&c[0]);
    DisableTexture2D();
    EnableVertexArray();
    glVertexPointer(2, GL_FLOAT, 0, &(vertices[0]));
    glDrawArrays(GL_LINES, 0, num_vertices);

    PopState();
}
Ejemplo n.º 2
0
void VideoEngine::DrawLine(float x1, float y1, float x2, float y2, float width, const Color& color)
{
    GLfloat vert_coords[] = {
        x1, y1,
        x2, y2
    };
    EnableBlending();
    DisableTexture2D();
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Normal blending
    glPushAttrib(GL_LINE_WIDTH);

    glLineWidth(width);
    EnableVertexArray();
    DisableColorArray();
    DisableTextureCoordArray();
    glColor4fv((GLfloat *)color.GetColors());
    glVertexPointer(2, GL_FLOAT, 0, vert_coords);
    glDrawArrays(GL_LINES, 0, 2);

    glPopAttrib(); // GL_LINE_WIDTH
}
Ejemplo n.º 3
0
bool VideoEngine::ApplySettings()
{
    if(_target == VIDEO_TARGET_SDL_WINDOW) {
        // Losing GL context, so unload images first
        if(TextureManager && TextureManager->UnloadTextures() == false) {
            IF_PRINT_WARNING(VIDEO_DEBUG) << "failed to delete OpenGL textures during a context change" << std::endl;
        }

        int32 flags = SDL_OPENGL;

        if(_temp_fullscreen == true) {
            flags |= SDL_FULLSCREEN;
        }

        SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
        SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
        SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
        SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
        SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
        SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
        SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 2);
        SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4);
        SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);

        if(SDL_SetVideoMode(_temp_width, _temp_height, 0, flags) == false) {
            // RGB values of 1 for each and 8 for depth seemed to be sufficient.
            // 565 and 16 here because it works with them on this computer.
            // NOTE from prophile: this ought to be changed to 5558
            SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
            SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6);
            SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
            SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
            SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 0);
            SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0);
            SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0);
            SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);

            if(SDL_SetVideoMode(_temp_width, _temp_height, 0, flags) == false) {
                IF_PRINT_WARNING(VIDEO_DEBUG) << "SDL_SetVideoMode() failed with error: " << SDL_GetError() << std::endl;

                _temp_fullscreen = _fullscreen;
                _temp_width = _screen_width;
                _temp_height = _screen_height;

                if(TextureManager && _screen_width > 0) {  // Test to see if we already had a valid video mode
                    TextureManager->ReloadTextures();
                }
                return false;
            }
        }

        // Clear GL state, after SDL_SetVideoMode() for OSX compatibility
        DisableBlending();
        DisableTexture2D();
        DisableAlphaTest();
        DisableStencilTest();
        DisableScissoring();
        DisableVertexArray();
        DisableColorArray();
        DisableTextureCoordArray();

        // Turn off writing to the depth buffer
        glDepthMask(GL_FALSE);

        _screen_width = _temp_width;
        _screen_height = _temp_height;
        _fullscreen = _temp_fullscreen;

        if(TextureManager)
            TextureManager->ReloadTextures();

        return true;
    } // if (_target == VIDEO_TARGET_SDL_WINDOW)

    // Used by the editor, which uses QT4
    else if(_target == VIDEO_TARGET_QT_WIDGET) {
        _screen_width = _temp_width;
        _screen_height = _temp_height;
        _fullscreen = _temp_fullscreen;

        return true;
    }

    return false;
} // bool VideoEngine::ApplySettings()