Display Lists & Text

Download Report

Transcript Display Lists & Text

Display Lists & Text Glenn G. Chappell

[email protected]

U. of Alaska Fairbanks CS 381 Lecture Notes Monday, September 22, 2003

Review: Client-Server Model

   Many operations in a computing environment, especially in a networked environment, are provided via a client-server model.

 The server sits and waits for requests.

 A client can request the server to provide services.

This model works well in a CG context.

 Client: Application program.

 Server: Graphics hardware (or low-level software).

The model affects optimization.

 Assumption: client-server communication may be slow.

22 Sep 2003 CS 381 2

Display Lists: Motivation

  Many factors can slow down OpenGL rendering.

    Scenes modeled in real time may require large computations.

*Function-call overhead.

*Slow client-server communication.

Slow rendering hardware.

In order to mitigate some of these effects (marked with *), OpenGL provides “display lists”.

 In OpenGL-speak, these are often called “call lists”.

22 Sep 2003 CS 381 3

Display Lists: What Are They?

 A display list (or call list) is a way for an OpenGL implementation to store a sequence of OpenGL commands for later playback.

 Application programmers need no knowledge of how display lists are stored. You simply tell OpenGL: Store these commands as a display list.

   A display list can be compiled once and executed many times.

Display lists always reduce function-call overhead.

Since display lists may be stored on the graphics hardware, they may reduce client-server communication delays.

22 Sep 2003 CS 381 4

Display Lists: Usage Overview

  We compile a display list in four steps:   Allocate a “name” (actually an integer) for the list. (

glGenLists

).

Tell OpenGL that we are creating a display list (

glNewList

).

  Make the OpenGL function calls that we want to store in the display list.

Tell OpenGL that we are finished creating the list (

glEndList

).

We can later execute the commands in the display list.

 We use a display list by calling it (

glCallList

).

 This tells OpenGL to execute all the commands stored in the list, just as if we made all those calls again, but generally a bit faster.

22 Sep 2003 CS 381 5

Display Lists: Usage Details — Naming

    An OpenGL display-list “name” is just a number.

 But that number must be assigned by OpenGL.

Get a display-list name with

glGenLists

.

 1 parameter: # of list names to generate.

 Return value: 1 st list name generated, or 0 if error.

Put the name into a global

int

.

Check for errors!

int my_list; // global // The following goes in function init, maybe?

my_list = glGenLists(1); // Give me 1 list name if (my_list == 0) { cerr << "Could not make display-list" << endl; exit(1); // Error }

22 Sep 2003 CS 381 6

Display Lists: Usage Details — Compilation

   We compile a display list using

glNewList

. 2 parameters:   The list name.

Either

GL_COMPILE

or

GL_COMPILE_AND_EXECUTE

.

• The latter is useful when making a display list in the display function.

Then give the OpenGL commands to be stored in the list.

Last,

glEndList

(no parameters).

glNewList(my_list, GL_COMPILE); // Lots of OpenGL commands here // Indentation helps, as with glBegin/glEnd glEndList();

 You can do

glBegin

glEnd

inside the above, but do not do the above inside

glBegin

glEnd

.

22 Sep 2003 CS 381 7

Display Lists: Usage Details — Execution

 We execute a display list using

glCallList

.

 1 parameter: The list name.

// The following goes in the display function!

glCallList(my_list);

 There is also

glCallLists

, for executing multiple display lists.

22 Sep 2003 CS 381 8

EXAMPLE 1

 Modify

intro2d.cpp

   to use a display list.

Modified the program so that the color was set and the square was drawn using a display list.

The display list was created in function

init

.

The display function was reduced to 3 lines:

Clear the viewport.

• •

Execute the display list.

Flush.

22 Sep 2003 CS 381 9

Text: Introduction

 

In CG, text comes in two varieties:

  Raster/bitmap fonts.

• Text described as an image.

Outline/stroke fonts.

• Text described as a sequence of curves.

Both are available, in a limited form, in GLUT.

 We will discuss bitmap text here.

22 Sep 2003 CS 381 10

Text: Raster Position & Bitmaps [1/2]

  When we make bitmap text, we are telling OpenGL to draw a raster image.

 A raster image is drawn with the left-hand point on its baseline at the current raster position.

The OpenGL raster position is specified with

glRasterPos

*.

 Coordinates passed via passed via • However,

glVertex

*.

glRasterPos glRasterPos

* pass through the same transformations as those * is not called between

glBegin

&

glEnd

.

22 Sep 2003 CS 381 11

Text: Raster Position & Bitmaps [2/2]

   Bitmap images are raster images with 1 bit per pixel.

 They are intended specifically for rendering bitmap text.

OpenGL draws bitmap images with the primitive

glBitmap

.

 This command includes an amount to move the raster position by.

We will use GLUT commands, not

glBitmap

, but it is important to remember that

glBitmap

is what GLUT calls.

22 Sep 2003 CS 381 12

Text: Using GLUT Bitmap Fonts

  We draw a character at the current raster position using

glutBitmapCharacter

. 2 parameters:  The GLUT font to use.

• I use

GLUT_BITMAP_9_BY_15

. See doc’s for others.

 The character to render.

The raster position is advanced by an appropriate amount.

22 Sep 2003 CS 381 13

EXAMPLE 2

See the program

bmptext.cpp

, which draws bitmap text using GLUT.

Source code is on the web page.

22 Sep 2003 CS 381 14