no display name and no $DISPLAY environment variable
    while executing
"load /enadisk/commun/linux/local/ActiveTcl-8.6.11/lib/libtk8.6.so Tk"
    ("package ifneeded Tk 8.6.11" script)
    invoked from within
"package require Tk"
    (in namespace eval "::request" script line 13)
    invoked from within
"namespace eval ::request $script"
    ("::try" body line 12)

OUTPUT BUFFER:

# OpenGL 3.3 with GLEW - Example 02 # # @author Norbert Nopper norbert@nopper.tv # @version 1.0 # # Homepage: http://nopper.tv # # Copyright Norbert Nopper # # Modified for Tcl3D by Paul Obermeier 2010/09/01 # See www.tcl3d.org for the Tcl3D extension. package require Tk package require tcl3d 0.5.0 # Font to be used in the Tk listbox. set g_Demo(listFont) {-family {Courier} -size 10} # Obtain the name of this script file. set g_Demo(scriptDir) [file dirname [info script]] # Window size. set g_Demo(winWidth) 640 set g_Demo(winHeight) 480 # Show errors occuring in the Togl callbacks. proc bgerror { msg } { tk_messageBox -icon error -type ok -message "Error: $msg\n\n$::errorInfo" ExitProg } # Print info message into widget a the bottom of the window. proc PrintInfo { msg } { if { [winfo exists .fr.info] } { .fr.info configure -text $msg } } # Function for initialization. proc Init {} { global g_Demo g_Program # Points of a triangle. set pointList [list \ 0.0 0.0 0.0 1.0 \ 0.5 0.0 0.0 1.0 \ 0.0 0.5 0.0 1.0 \ ] set pointVec [tcl3dVectorFromList GLfloat $pointList] set pointVecSize [expr [llength $pointList] * [$pointVec elemsize]] # Load the source of the vertex shader. set vertexSource [tcl3dOglReadShaderFile [file join $g_Demo(scriptDir) "Vertex.vs"]] # Load the source of the fragment shader. set fragmentSource [tcl3dOglReadShaderFile [file join $g_Demo(scriptDir) "Fragment.fs"]] set g_Program [tcl3dOglBuildProgram $vertexSource "" "" "" $fragmentSource] # The VAO for the vertices etc. set g_Demo(vao) [tcl3dVector GLuint 1] glGenVertexArrays 1 $g_Demo(vao) glBindVertexArray [$g_Demo(vao) get 0] # The location of the vertex in the shader program set vertexLocation [glGetAttribLocation [dict get $g_Program program] "vertex"] # The VBO for the vertices. set g_Demo(vertices) [tcl3dVector GLuint 1] glGenBuffers 1 $g_Demo(vertices) glBindBuffer GL_ARRAY_BUFFER [$g_Demo(vertices) get 0] glBufferData GL_ARRAY_BUFFER $pointVecSize $pointVec GL_STATIC_DRAW glUseProgram [dict get $g_Program program] glVertexAttribPointer $vertexLocation 4 GL_FLOAT GL_FALSE 0 "NULL" glEnableVertexAttribArray $vertexLocation } proc CreateCallback { toglwin } { glClearColor 0.0 0.0 0.0 0.0 glClearDepth 1.0 } proc ReshapeCallback { toglwin { w -1 } { h -1 } } { set w [$toglwin width] set h [$toglwin height] glViewport 0 0 $w $h } proc DisplayCallback { toglwin } { global g_Demo glClear [expr $::GL_COLOR_BUFFER_BIT | $::GL_DEPTH_BUFFER_BIT] if { ! $g_Demo(haveNeededVersion) } { $toglwin swapbuffer return } glDrawArrays GL_TRIANGLES 0 3 $toglwin swapbuffer } proc Cleanup {} { global g_Demo g_Program if { [info exists g_Demo(vertices)] } { glDeleteBuffers 1 [$g_Demo(vertices) get 0] $g_Demo(vertices) delete } if { [info exists g_Demo(vao)] } { glDeleteVertexArrays 1 [$g_Demo(vao) get 0] $g_Demo(vao) delete } if { [info exists g_Program] } { tcl3dOglDestroyProgram $g_Program } # Unset all global variables. # Needed when running the demo in the Tcl3D presentation framework. foreach var [info globals g_*] { uplevel #0 unset $var } } # Put all exit related code here. proc ExitProg {} { exit } # Create the OpenGL window and some Tk helper widgets. proc CreateWindow {} { global g_Demo frame .fr pack .fr -expand 1 -fill both # Create a Togl window with an OpenGL core profile using version 3.3. togl .fr.toglwin -width $g_Demo(winWidth) -height $g_Demo(winHeight) \ -double true -depth true \ -createproc CreateCallback \ -reshapeproc ReshapeCallback \ -displayproc DisplayCallback \ -coreprofile true -major 3 -minor 3 set g_Demo(haveNeededVersion) true set numRows 1 set haveGL2 [tcl3dOglHaveVersion 2] if { ! $haveGL2 } { set msgStr [format \ "Demo needs core profile 3.3. Only have GL version %s" \ [tcl3dOglGetVersion]] set g_Demo(haveNeededVersion) false incr numRows } else { set profile [tcl3dOglGetProfile] if { [dict get $profile "coreprofile"] != true } { set msgStr [format \ "Demo needs core profile 3.3. Only have compatibility profile %d.%d" \ [dict get $profile "major"] \ [dict get $profile "minor"]] incr numRows } } if { $g_Demo(haveNeededVersion) } { # If OpenGL 3.3 or higher is available, initialize the buffers. Init } listbox .fr.usage -font $g_Demo(listFont) -height $numRows label .fr.info grid .fr.toglwin -row 0 -column 0 -sticky news grid .fr.usage -row 1 -column 0 -sticky news grid .fr.info -row 2 -column 0 -sticky news grid rowconfigure .fr 0 -weight 1 grid columnconfigure .fr 0 -weight 1 wm title . "Tcl3D demo: Nopper's OpenGL 3.3 and 4.0 tutorials (Example 02)" # Watch for Esc key and Quit messages wm protocol . WM_DELETE_WINDOW "ExitProg" bind . "ExitProg" .fr.usage insert end "Key-Escape Exit" if { [info exists msgStr] } { .fr.usage insert end $msgStr .fr.usage itemconfigure end -background red } else { .fr.usage configure -state disabled } } CreateWindow PrintInfo [format "Running on %s %s with a %s (OpenGL %s, Tcl %s)" \ $tcl_platform(os) $tcl_platform(osVersion) \ [glGetString GL_RENDERER] [glGetString GL_VERSION] [info patchlevel]]