Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

21
Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    217
  • download

    0

Transcript of Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

Page 1: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

Vertical Retrace Interval

An introduction to VGA techniques for smooth graphics animation

Page 2: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

The CRT Display

Screen’s image consists of horizontal scanlines, drawn in top-down order,and redrawn about 60-70 times per second (depending on display mode).

Page 3: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

Image “persistence”

• The impression of a steady screen image is purely a mental illusion of the viewer’s

• The pixels are drawn on the CRT screen too rapidly for the human eye to follow

• And the screen phosphor degrades slowly• So the brain blends a rapid succession of

discrete images into a continuous motion• So-called ‘motion pictures’ are based on

these phenomena, too (30 frames/second)

Page 4: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

Color “dithering”

• The mind’s tendency to “blend” together distinct images that appear near to one another in time can be demonstrated by using two different colors -- alternately displayed in very rapid succession

• This is one technique called “dithering”

• Some early graphics applications actually used this approach, to show extra colors

Page 5: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

Timing mechanism

• Today’s computers can “redraw” screens much faster than a CRT can display them

• We need to “slow down” the redrawing so that the CRT circuitry will be able keep up

• Design of VGA hardware allows programs to “synchronize” drawing with CRT refresh

• Use the “INPUT STATUS REGISTER 1” accessible (read-only) at I/O port 0x3DA

Page 6: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

Input Status Register One 7 6 5 4 3 2 1 0

Vertical Retrace status 1 = retrace is active 0 = retrace inactive

Display Enabled status1 = VGA is reading (and displaying) VRAM0 = Horizontal or Vertical Blanking is active

I/O port-address: 0x3DA (color display) or 0x3BA (monochrome display)

Page 7: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

void vertical_retrace_sync( void )

{// spin if retrace is already underwaywhile ( ( inb( 0x3DA ) & 8 ) == 8 );// then spin until a new retrace startswhile ( ( inb( 0x3DA ) & 8 ) == 0 );

}// This function only returns at the very beginning// of a new vertical blanking interval, to maximize// the time for drawing while the screen is blanked

Page 8: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

Animation algorithm

1) Erase the previous screen

2) Draw a new screen-image

3) Get ready to draw another screen

4) But wait for a vertical retrace to begin

5) Then go back to step 1.

Page 9: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

How much drawing time?

• Screen-refresh occurs 60 times/second

• So time between refreshes is 1/60 second

• Vertical blanking takes about 5% of time

• So “safe” drawing-time for screen-update is about: (1/60)*(5/100) = 1/1200 second

• What if your screen-updates take longer?

• Animation may exhibit “tearing” of images

Page 10: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

Retrace visualization

• Our demo-program ‘instatus.cpp’ provides a visualization for the (volatile) state of the VGA’s Input Status Register One

• It repeatedly inputs this register’s contents and writes that value to the video memory

• The differences in pixel-coloring show how much time is spent in the ‘retrace’ states

• You can ‘instrument’ its loop to get percent

Page 11: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

Programming techniques

• Your application may not require that the whole screen be redrawn for every frame

• Maybe only a small region changes, so time to “erase-and-redraw” it is reduced

• You may be able to speed up the drawing operations, by “optimizing” your code

• Using assembly language can often help

Page 12: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

Using off-screen VRAM

• You can also draw to off-screen memory, which won’t affect what’s seen on-screen

• When your ‘off-screen’ image is finished, you can quickly copy it to the on-screen memory area (called a ‘BitBlit’ operation)

• Both CPU and SVGA provide support for very rapid copying of large memory areas

Page 13: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

Offscreen VRAM

Extra VRAM available

CRTC Start_Address (default = 0) VRAM for the visible

screen-image

16MB on ourRadeon X300

Our classroom machines have 16-megabytes of video display memory The amount needed by the CRT for a complete screen-image depends upon your choice of the video display mode

Example: For a 1280-by-960 TrueColor graphics mode (e.g., 32 bits per pixel) the visible VRAM is 1280x960x4 bytes (which is less than 5 megabytes)

Page 14: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

Our ‘animate1.cpp’ demo

• We can demonstrate smooth animation with a “proof-of-concept” prototype

• It’s based on the classic “pong” game

• A moving ball bounces against a wall

• The user is able to move a “paddle” by using an input-device (such as a mouse, keyboard, or joystick)

• We didn’t implement user-interaction yet

Page 15: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

In-class exercises #1

• Investigate the effect of the function-calls to our ‘vertical_retrace_sync()’ routine (by turning it into a comment and recompiling)

• Add a counter to the loop in ‘instatus.cpp’ which is incrementd whenever bit 3 is set, to find the percentage of loop-iteractions during which vertical blanking was active

Page 16: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

Adding sound effects

• We can take advantage of Linux’s support for synchronizing digital audio with graphic animation -- adds ‘realism’ to ‘pong’ game

• But for this we will need to understand the basic principles for using PC soundcards

• Linux supports two APIs: OSS and ALSA – Open Sound System (by 4Front Technology)– Advanced Linux Sound Architecture (GNU)

Page 17: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

A PC’s ‘Timer-Counter’

• Most PCs have a built-in ‘Timer-Counter’ that is capable of directly driving the PC’s internal speaker (if suitably programmed)

• By using simple arithmetic, a programmer can produce a musical tone of any pitch, and so can play tunes by controlling the sequencing and duration of those tones

• But we can’t hear the speaker in our class

Page 18: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

‘Square Wave’ output

• But we can listen to the external speakers that attach to the Instructor’s workstation, or listen to a stereo headset that you plug in to your individual machine’s soundcard

• The same basic principle used by the PC internal speaker and Timer-Counter – if understood – can be used in our software to generate ‘square-wave’ musical tones

Page 19: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

Our ‘flipflop.cpp’ demo

• We created a graphics animation that will show you the basic idea for generating a ‘square-wave’ output-stream to vibrate an external speaker (or headset earphones) at any given frequency humans can hear

• This animation also illustrates principles of VGA graphics animation programming for a 4bpp (16-color) “planar” memory-model

Page 20: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

Our ‘makewave.cpp’ tool

• We created a tool that will generate actual audio files which play notes of designated frequencies – under Linux or another OS (e.g. WinXP) that understands a standard Waveform Audio File (.wav)

• You can see what application code you’d need to write, to play a .’wav’ file using the simple OSS Linux programming interface, by looking at our ‘pcmplay.cpp’ program

Page 21: Vertical Retrace Interval An introduction to VGA techniques for smooth graphics animation.

In-class exercises #2

• Use our ‘makewave’ program to produce some .wav files that contain square-wave data for musical tones of different pitches

• Use our ‘pcmplay’ program to play these audio files (and listen with your headset)

• We will learn more about Waveform files in our next lecture – bring your earphones if you have them!