15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci EXT_scene_marker 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_EXT_scene_marker 85bd8deadSopenharmony_ci GLX_EXT_scene_marker 95bd8deadSopenharmony_ci 105bd8deadSopenharmony_ciVersion 115bd8deadSopenharmony_ci 125bd8deadSopenharmony_ci $Date: 1997/09/08 21:31:59 $ $Revision: 1.4 $ 135bd8deadSopenharmony_ci 145bd8deadSopenharmony_ciNumber 155bd8deadSopenharmony_ci 165bd8deadSopenharmony_ci 120 175bd8deadSopenharmony_ci 185bd8deadSopenharmony_ciDependencies 195bd8deadSopenharmony_ci 205bd8deadSopenharmony_ci OpenGL 1.1 is required. 215bd8deadSopenharmony_ci 225bd8deadSopenharmony_ciOverview 235bd8deadSopenharmony_ci 245bd8deadSopenharmony_ci This extension provides BeginScene/EndScene markers to allow buffering 255bd8deadSopenharmony_ci and sorting of the OpenGL command sequence needed to construct and 265bd8deadSopenharmony_ci entire frame. Scene markers are useful for region (aka tile) rendering 275bd8deadSopenharmony_ci architectures, in which all of the geometry for a region a window must 285bd8deadSopenharmony_ci be known before any can be rasterized. It may also be applicable to 295bd8deadSopenharmony_ci other architectures requiring a scene database, such as scanline depth 305bd8deadSopenharmony_ci buffers. 315bd8deadSopenharmony_ci 325bd8deadSopenharmony_ciIssues 335bd8deadSopenharmony_ci 345bd8deadSopenharmony_ci * Region architectures usually generate only a color buffer. Depth, 355bd8deadSopenharmony_ci stencil, and other ancillary buffers, if they exist, are instantiated 365bd8deadSopenharmony_ci only for the screen region being rasterized at any given time, and 375bd8deadSopenharmony_ci are not retained after all geometry for that region has been 385bd8deadSopenharmony_ci processed. As a consequence, ancillary buffers are usually 395bd8deadSopenharmony_ci inaccessible via Read/Copy/Draw operations. Implementations may 405bd8deadSopenharmony_ci choose to relax this restriction. 415bd8deadSopenharmony_ci 425bd8deadSopenharmony_ci * State changes affecting primitives are buffered and may need to be 435bd8deadSopenharmony_ci processed for every screen region. This makes "large" state changes, 445bd8deadSopenharmony_ci such as DrawPixels or TexImage2D, likely to be prohibitively 455bd8deadSopenharmony_ci expensive within a scene. 465bd8deadSopenharmony_ci 475bd8deadSopenharmony_ci * State queries within a scene may also be very expensive, if they are 485bd8deadSopenharmony_ci deferred to hardware which normally would not process them until 495bd8deadSopenharmony_ci EndSceneEXT. As with large state changes, it seems preferable to 505bd8deadSopenharmony_ci allow state queries within a scene, but document that they may be 515bd8deadSopenharmony_ci costly. 525bd8deadSopenharmony_ci 535bd8deadSopenharmony_ci * Initial buffer state after BeginSceneEXT is undefined, forcing the 545bd8deadSopenharmony_ci application to overwrite all pixels. This implies that multiple 555bd8deadSopenharmony_ci scenes may not be merged into a single visible frame without software 565bd8deadSopenharmony_ci intervention to read back and combine scenes. 575bd8deadSopenharmony_ci 585bd8deadSopenharmony_ci * SCENE_REQUIRED_EXT is a property of the visual or pixel format, 595bd8deadSopenharmony_ci rather than an Enable. Making it an Enable would probably force a 605bd8deadSopenharmony_ci switch between hardware and software paths. 615bd8deadSopenharmony_ci 625bd8deadSopenharmony_ci * 2D (X or GDI or Quickdraw) rendering is probably only allowed after 635bd8deadSopenharmony_ci EndSceneEXT, to prevent synchronization issues. It's unclear how to 645bd8deadSopenharmony_ci phrase this in the spec, however. 655bd8deadSopenharmony_ci 665bd8deadSopenharmony_ci * Reads and copies between BeginSceneEXT and EndSceneEXT are made 675bd8deadSopenharmony_ci illegal, since there are many sensible interpretations of what the 685bd8deadSopenharmony_ci buffer contents might be during this period. 695bd8deadSopenharmony_ci 705bd8deadSopenharmony_ci * Add mechanism to allow out-of-order rendering, etc. 715bd8deadSopenharmony_ci 725bd8deadSopenharmony_ci No. 735bd8deadSopenharmony_ci 745bd8deadSopenharmony_ciNew Procedures and Functions 755bd8deadSopenharmony_ci 765bd8deadSopenharmony_ci void BeginSceneEXT(void); 775bd8deadSopenharmony_ci void EndSceneEXT(void); 785bd8deadSopenharmony_ci 795bd8deadSopenharmony_ciNew Tokens 805bd8deadSopenharmony_ci 815bd8deadSopenharmony_ci Accepted by the <attribList> parameter of glXChooseVisual, and by the 825bd8deadSopenharmony_ci <attrib> parameter of glXGetConfig: 835bd8deadSopenharmony_ci 845bd8deadSopenharmony_ci GLX_SCENE_REQUIRED_EXT 855bd8deadSopenharmony_ci 865bd8deadSopenharmony_ci Accepted by the <pname> parameters of GetBooleanv, GetIntegerv, 875bd8deadSopenharmony_ci GetFloatv, and GetDoublev: 885bd8deadSopenharmony_ci 895bd8deadSopenharmony_ci SCENE_REQUIRED_EXT 905bd8deadSopenharmony_ci 915bd8deadSopenharmony_ciAdditions to Chapter 2 of the 1.1 Specification (OpenGL Operation) 925bd8deadSopenharmony_ci 935bd8deadSopenharmony_ci None 945bd8deadSopenharmony_ci 955bd8deadSopenharmony_ciAdditions to Chapter 3 of the 1.1 Specification (Rasterization) 965bd8deadSopenharmony_ci 975bd8deadSopenharmony_ci None 985bd8deadSopenharmony_ci 995bd8deadSopenharmony_ciAdditions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations 1005bd8deadSopenharmony_ciand the Frame buffer) 1015bd8deadSopenharmony_ci 1025bd8deadSopenharmony_ciAdditions to Chapter 5 of the 1.1 Specification (Special Functions) 1035bd8deadSopenharmony_ci 1045bd8deadSopenharmony_ci <Insert before Section 5.6 Hints> 1055bd8deadSopenharmony_ci 1065bd8deadSopenharmony_ci 5.5.5 Scene Markers 1075bd8deadSopenharmony_ci 1085bd8deadSopenharmony_ci Some OpenGL implementations may benefit from having delimiters which 1095bd8deadSopenharmony_ci mark the start and end of a command sequence which draws an entire 1105bd8deadSopenharmony_ci scene. These implementations may process commands in such a way that it 1115bd8deadSopenharmony_ci is impractical to allow certain commands such as reading the color 1125bd8deadSopenharmony_ci buffer to occur during the course of rendering the scene. When 1135bd8deadSopenharmony_ci SCENE_REQUIRED_EXT is TRUE, OpenGL command processing is modified as 1145bd8deadSopenharmony_ci follows: 1155bd8deadSopenharmony_ci 1165bd8deadSopenharmony_ci A scene is started by issuing the command BeginSceneEXT; the contents of 1175bd8deadSopenharmony_ci the selected color, stencil, and depth buffers are undefined after 1185bd8deadSopenharmony_ci BeginSceneEXT. A scene is marked complete by issuing the command 1195bd8deadSopenharmony_ci EndSceneEXT. BeginSceneEXT and EndSceneEXT must be matched and do not 1205bd8deadSopenharmony_ci nest. 1215bd8deadSopenharmony_ci 1225bd8deadSopenharmony_ci When issued between BeginSceneEXT and the corresponding EndSceneEXT, the 1235bd8deadSopenharmony_ci commands ReadPixels, CopyPixels, CopyTexImage, CopyTexSubImage, 1245bd8deadSopenharmony_ci DrawBuffer, Accum, Flush, and Finish generate an INVALID_OPERATION 1255bd8deadSopenharmony_ci error. 1265bd8deadSopenharmony_ci 1275bd8deadSopenharmony_ci A ReadPixels or CopyPixels call requesting stencil, alpha, or depth 1285bd8deadSopenharmony_ci values may generate an INVALID_OPERATION error if the implementation 1295bd8deadSopenharmony_ci does not store those buffers in a form visible to the application. 1305bd8deadSopenharmony_ci 1315bd8deadSopenharmony_ci When outside of a BeginSceneEXT/EndSceneEXT sequence, the fragments 1325bd8deadSopenharmony_ci generated from the command DrawPixels and from geometry issued during a 1335bd8deadSopenharmony_ci Begin/End sequence have an undefined effect on the color and ancillary 1345bd8deadSopenharmony_ci buffers, but their changes to OpenGL state are processed as normal. All 1355bd8deadSopenharmony_ci other commands are unaffected. 1365bd8deadSopenharmony_ci 1375bd8deadSopenharmony_ci When SCENE_REQUIRED_EXT is FALSE, BeginSceneEXT and EndSceneEXT have no 1385bd8deadSopenharmony_ci effect, and none of the restrictions above are in force. 1395bd8deadSopenharmony_ci 1405bd8deadSopenharmony_ciAdditions to Chapter 6 of the 1.1 Specification (State and State Requests) 1415bd8deadSopenharmony_ci 1425bd8deadSopenharmony_ci None 1435bd8deadSopenharmony_ci 1445bd8deadSopenharmony_ciAdditions to the GLX Specification 1455bd8deadSopenharmony_ci 1465bd8deadSopenharmony_ci The parameter GLX_SCENE_REQUIRED_EXT is added to glXGetConfig. When 1475bd8deadSopenharmony_ci queried, by calling glXGetConfig with <attrib> set to 1485bd8deadSopenharmony_ci GLX_SCENE_REQUIRED_EXT, it returns True if the visual requires scene 1495bd8deadSopenharmony_ci markers. For a normal visual, the return value is False. 1505bd8deadSopenharmony_ci 1515bd8deadSopenharmony_ci glXChooseVisual accepts GLX_SCENE_REQUIRED_EXT in <attribList>. Visuals 1525bd8deadSopenharmony_ci that require scene markers are preferred. 1535bd8deadSopenharmony_ci 1545bd8deadSopenharmony_ciGLX Protocol 1555bd8deadSopenharmony_ci 1565bd8deadSopenharmony_ci XXX - not done yet 1575bd8deadSopenharmony_ci 1585bd8deadSopenharmony_ciAdditions to WGL 1595bd8deadSopenharmony_ci 1605bd8deadSopenharmony_ci The flag PFD_SCENE_REQUIRED_EXT is added to ChoosePixelFormat, to allow 1615bd8deadSopenharmony_ci selecting a pixel format which requires scene markers. 1625bd8deadSopenharmony_ci 1635bd8deadSopenharmony_ci XXX - not done yet (no extension query mechanism for WGL at present). 1645bd8deadSopenharmony_ci 1655bd8deadSopenharmony_ciErrors 1665bd8deadSopenharmony_ci 1675bd8deadSopenharmony_ci INVALID_OPERATION if BeginSceneEXT or EndSceneEXT is issued between 1685bd8deadSopenharmony_ci execution of Begin and the corresponding execution of End. 1695bd8deadSopenharmony_ci 1705bd8deadSopenharmony_ci INVALID_OPERATION if BeginSceneEXT is issued between execution of 1715bd8deadSopenharmony_ci BeginSceneEXT and the corresponding execution of EndSceneEXT or 1725bd8deadSopenharmony_ci EndSceneEXT is issued when no BeginSceneEXT preceded it. 1735bd8deadSopenharmony_ci 1745bd8deadSopenharmony_ci INVALID_OPERATION if ReadPixels, CopyPixels, CopyTexImage, 1755bd8deadSopenharmony_ci CopyTexSubImage, DrawBuffer, Accum, Flush, or Finish is issued between 1765bd8deadSopenharmony_ci execution of BeginSceneEXT and the corresponding execution of 1775bd8deadSopenharmony_ci EndSceneEXT. 1785bd8deadSopenharmony_ci 1795bd8deadSopenharmony_ci INVALID_OPERATION if ReadPixels or CopyPixels is issued requesting 1805bd8deadSopenharmony_ci alpha, stencil, or depth components, and the implementation does not 1815bd8deadSopenharmony_ci store those buffers in a form visible to the application. 1825bd8deadSopenharmony_ci 1835bd8deadSopenharmony_ciNew State 1845bd8deadSopenharmony_ci 1855bd8deadSopenharmony_ci Get Value Get Command Type Initial Value Attribute 1865bd8deadSopenharmony_ci --------- ----------- ---- ------------- --------- 1875bd8deadSopenharmony_ci SCENE_REQUIRED_EXT GetBooleanv B - - 1885bd8deadSopenharmony_ci 1895bd8deadSopenharmony_ciNew Implementation Dependent State 1905bd8deadSopenharmony_ci 1915bd8deadSopenharmony_ci None 1925bd8deadSopenharmony_ci 1935bd8deadSopenharmony_ciRevision History 1945bd8deadSopenharmony_ci 1955bd8deadSopenharmony_ciChanges due to IHV feedback, revision 1.3, September 2, 1997 (ljp) 1965bd8deadSopenharmony_ci 1975bd8deadSopenharmony_ci Made scene_marker a property of the visual or pixel format, rather than 1985bd8deadSopenharmony_ci an enable. Made DrawBuffer within a scene, or ReadPixels/CopyPixels of 1995bd8deadSopenharmony_ci depth or stencil, illegal. 200