libOpenB3D Win32/64 Linux32/64

Headers, Bindings, Libraries for use with FreeBASIC, Please include example of use to help ensure they are tested and usable.
D.J.Peters
Posts: 8586
Joined: May 28, 2005 3:28
Contact:

Re: libOpenB3D Win32/64 Linux32/64

Post by D.J.Peters »

D.J.Peters wrote:I will lock for a workaround !
Done :-)

Joshy

Code: Select all

var aBrush = LoadBrush("./mediaX/brick-c.png")
if len(*TextureName(GetBrushTexture(aBrush)))=0 then
  screen 0 : print "fatal error: loading './media/brick-c.png' !"
  beep:sleep:end 1
end if

Code: Select all

var sFileName = "./media/ninja.b3d"
if open(sFileName,for input as #99) then
  screen 0 : print "fatal error: can't load '" & sFileName & "' !"
  beep : sleep :end 1
else
  close #99
end if  
var aAnimMesh = LoadAnimMesh(sFileName)
D.J.Peters
Posts: 8586
Joined: May 28, 2005 3:28
Contact:

Re: libOpenB3D Win32/64 Linux32/64

Post by D.J.Peters »

I wrote a "simple" GPU mandelbrot explorer and added some comments for beginners.

[ESCAPE] and [X] window close button = quit
cursor keys move around
[LEFT]
[RIGHT]
[UP]
[DOWN]
[+][-] zoom in/out
[r] = reset

Joshy

click to enlarge:
Image
file: mandelbrot_gpu.bas

Code: Select all

#include once "openb3d.bi"

#define V(_code_) sVert &= _code_ & !"\n"
#define F(_code_) sFrag &= _code_ & !"\n"

var sVert = !"#version 120\n"
var sFrag = !"#version 120\n"

' *****************************
' * the minimal vertex shader *
' *****************************
V("void main() {")
V("  gl_Position = ftransform();")
V("}")

' ***********************
' * the fragment shader *
' ***********************
' Uniforms are shader [i]nput vars. 
' This kind of vars can be "written" by FreeBASIC 
' and are "read only" for the GPU program !
F("uniform float iTime;")
F("uniform float iZoom;")
F("uniform vec2  iCenter;")
F("uniform vec3  iResolution;")

' A integer CONST the maximum depth of iteration.
F("const int MAX_ITERA = 256;")

' The main C style entry to the fragment shader.
F("void main() {")
F("  vec2  z;")
F("  int   i;")

' map screen resolution to -.5,-.5 <-> +.5,+.5
F("  vec2  uv = (gl_FragCoord.xy - iResolution.xy*.5)/iResolution.y;")

' zoom from -.5,-.5 <-> .5,.5 to mandelbrot circle with radius 2.0 !
F("  vec2 c = iCenter + uv*iZoom;")

' Do the complex number iteration
' (it sqaured the summed imaginare and real parts)
F("  for(i=0; i<MAX_ITERA; i++) {")
F("    z = vec2(z.x*z.x - z.y*z.y, 2*z.x*z.y) + c;")
' If the distance is greater then the mandelbrot circle radius 2.0 interrupt the loop.
F("    if (length(z)>2.0) break;")
F("  }")
' If there was no solution in number of max iteration steps 
' discard the current pixel (the black parts).
F("  if (i==MAX_ITERA) discard;")

' Generate from integer iteration counter "i" 
' an 3 component float RGB color vector.
F("  float w = float(i);") ' <-- this is the right way to cast integer to float !
F("  float r = sin(w+c.x);")
F("  float g = cos(w+c.y);")
F("  float b = sin(w*r*g);")
' map cos/sin from -1<->+1 to 0<->2
F("  vec3  col = vec3(r,g,b)+1.;")
' map from 0<->2 to RGB 0<->1
F("        col = col*.5;")

' return the pixel color to the GPU 
F("  gl_FragColor = vec4(col,1.0);") 
F("}")

dim as integer iWidth  = 800
dim as integer iHeight = 600
screeninfo iWidth, iHeight
if screenres(iWidth*.8, iHeight*.8,32,,2) then
  print "Fatal error: can't create OpenGL context !"
  beep : sleep : end 1
end if  


' tell libOpenB3B the size of our render context.
screeninfo iWidth, iHeight
Graphics3d(iWidth,iHeight)

' compile a 'mandelbrot' shader from source code string's
var aShader = CreateShader("shadertoy",sVert,sFrag)


' use the compiled shader as default material
AmbientShader(aShader)

' without a camera and minimum 1 object libOpenB3B will nothing render 
' and the GPU shader program would never be called !
var aCamera=CreateCamera()
CameraProjMode(aCamera,CAM_MODE_ORTHO)
MoveEntity(aCamera,0,0,-2)
var aCube = CreateCube()

var Zoom = 4.0, CenterX=0.0, CenterY=0.0

' set some shader input vars
SetFloat (aShader,"iZoom", Zoom)
' offset inside the mandelbrot circle
SetFloat2(aShader,"iCenter",CenterX,CenterY)
' width x height and ratio
SetFloat3(aShader,"iResolution",iWidth,iHeight,iWidth/iHeight)

var frame=0,fps=0
var bExit = false, bClose=false
var tRuntime=0.0,tStart = Timer(),tLast=tStart

while bExit = false andalso bClose = false ' [x] window close button
  var sKey = inkey()
  var iKey = len(sKey)
  if iKey then 
    iKey-=1:iKey=sKey[iKey]+iKey*256
    select case as const iKey
    case  27 : ' [ESC]
                 bExit = true
    case  43 : ' [+] zoom in
                 Zoom  *=0.99 : SetFloat(aShader,"iZoom",Zoom) 
    case  45 : ' [-] zoom out 
                 Zoom  *=1.01 : SetFloat(aShader,"iZoom",Zoom)
    case 114 : ' [r]eset 
                 Zoom = 4 : CenterX = 0 : CenterY = 0 ' [r]
                 SetFloat(aShader,"iZoom",Zoom)
                 SetFloat2(aShader,"iCenter",CenterX,CenterY)
    case 328 : ' [up] 
                 CenterY+=0.01*Zoom 
                 SetFloat2(aShader,"iCenter",CenterX,CenterY)
    case 331 : ' [left] 
                 CenterX-=0.01*Zoom
                 SetFloat2(aShader,"iCenter",CenterX,CenterY) 
    case 333 : ' [right]
                 CenterX+=0.01*Zoom
                 SetFloat2(aShader,"iCenter",CenterX,CenterY) 
    case 336 :   ' [down]
                 CenterY-=0.01*Zoom 
                 SetFloat2(aShader,"iCenter",CenterX,CenterY) 
    case 363 :   ' window close button
                 bClose = true
    'case else : windowtitle "key:" & iKey
    end select
    
  end if  
  tRuntime = Timer()-tStart
  ' update input var "iTime"
  SetFloat(aShader,"iTime",tRuntime)
  ' triger the GPU shader
  RenderWorld()
  ' show it on screen
  Flip
  ' update fps counter
  frame+=1
  if frame mod 60=0 then
    var tNow=Timer()
    fps = 60/(tNow-tLast) : tLast=tNow
    WindowTitle "fps: " & fps
  end if  
  sleep 10
wend   
Last edited by D.J.Peters on Oct 12, 2022 18:16, edited 2 times in total.
badidea
Posts: 2586
Joined: May 24, 2007 22:10
Location: The Netherlands

Re: libOpenB3D Win32/64 Linux32/64

Post by badidea »

D.J.Peters wrote:I wrote a "simple" GPU mandelbrot explorer and added some comments for beginners.
It does not look so good here. Ubuntu 64-bit, fbc 1.07.1 32 & 64-bit, screen:
https://nr100.home.xs4all.nl/badidea/ma ... -02-06.png

Some 'glxinfo':

Code: Select all

name of display: :0
display: :0  screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
    GLX_ARB_create_context, GLX_ARB_create_context_profile, 
    GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float, 
    GLX_ARB_framebuffer_sRGB, GLX_ARB_multisample, 
    GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile, 
    GLX_EXT_fbconfig_packed_float, GLX_EXT_framebuffer_sRGB, 
    GLX_EXT_import_context, GLX_EXT_libglvnd, GLX_EXT_texture_from_pixmap, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_INTEL_swap_event, 
    GLX_MESA_copy_sub_buffer, GLX_OML_swap_method, GLX_SGIS_multisample, 
    GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group, 
    GLX_SGI_make_current_read, GLX_SGI_swap_control
client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:
    GLX_ARB_context_flush_control, GLX_ARB_create_context, 
    GLX_ARB_create_context_no_error, GLX_ARB_create_context_profile, 
    GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float, 
    GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample, 
    GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile, 
    GLX_EXT_create_context_es_profile, GLX_EXT_fbconfig_packed_float, 
    GLX_EXT_framebuffer_sRGB, GLX_EXT_import_context, 
    GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating, 
    GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer, 
    GLX_MESA_multithread_makecurrent, GLX_MESA_query_renderer, 
    GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control, 
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
    GLX_SGIX_visual_select_group, GLX_SGI_make_current_read, 
    GLX_SGI_swap_control, GLX_SGI_video_sync
GLX version: 1.4
GLX extensions:
    GLX_ARB_create_context, GLX_ARB_create_context_profile, 
    GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float, 
    GLX_ARB_framebuffer_sRGB, GLX_ARB_get_proc_address, GLX_ARB_multisample, 
    GLX_EXT_buffer_age, GLX_EXT_create_context_es2_profile, 
    GLX_EXT_create_context_es_profile, GLX_EXT_fbconfig_packed_float, 
    GLX_EXT_framebuffer_sRGB, GLX_EXT_import_context, 
    GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating, 
    GLX_INTEL_swap_event, GLX_MESA_copy_sub_buffer, GLX_MESA_query_renderer, 
    GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control, 
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
    GLX_SGIX_visual_select_group, GLX_SGI_make_current_read, 
    GLX_SGI_swap_control, GLX_SGI_video_sync
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: Intel Open Source Technology Center (0x8086)
    Device: Mesa DRI Intel(R) HD Graphics 5500 (Broadwell GT2)  (0x1616)
    Version: 19.2.1
    Accelerated: yes
    Video memory: 3072MB
    Unified memory: yes
    Preferred profile: core (0x1)
    Max core profile version: 4.5
    Max compat profile version: 3.0
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.1
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 5500 (Broadwell GT2) 
OpenGL core profile version string: 4.5 (Core Profile) Mesa 19.2.1
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
    GL_3DFX_texture_compression_FXT1, GL_AMD_conservative_depth, 
    GL_AMD_draw_buffers_blend, GL_AMD_gpu_shader_int64, 
    GL_AMD_multi_draw_indirect, GL_AMD_query_buffer_object, 
    GL_AMD_seamless_cubemap_per_texture, GL_AMD_shader_trinary_minmax, 
    GL_AMD_texture_texture4, GL_AMD_vertex_shader_layer, 
    GL_AMD_vertex_shader_viewport_index, GL_ANGLE_texture_compression_dxt3, 
    GL_ANGLE_texture_compression_dxt5, GL_APPLE_object_purgeable, 
    GL_ARB_ES2_compatibility, GL_ARB_ES3_1_compatibility, 
    GL_ARB_ES3_2_compatibility, GL_ARB_ES3_compatibility, 
    GL_ARB_arrays_of_arrays, GL_ARB_base_instance, GL_ARB_blend_func_extended, 
    GL_ARB_buffer_storage, GL_ARB_clear_buffer_object, GL_ARB_clear_texture, 
    GL_ARB_clip_control, GL_ARB_compressed_texture_pixel_storage, 
    GL_ARB_compute_shader, GL_ARB_conditional_render_inverted, 
    GL_ARB_conservative_depth, GL_ARB_copy_buffer, GL_ARB_copy_image, 
    GL_ARB_cull_distance, GL_ARB_debug_output, GL_ARB_depth_buffer_float, 
    GL_ARB_depth_clamp, GL_ARB_derivative_control, GL_ARB_direct_state_access, 
    GL_ARB_draw_buffers, GL_ARB_draw_buffers_blend, 
    GL_ARB_draw_elements_base_vertex, GL_ARB_draw_indirect, 
    GL_ARB_draw_instanced, GL_ARB_enhanced_layouts, 
    GL_ARB_explicit_attrib_location, GL_ARB_explicit_uniform_location, 
    GL_ARB_fragment_coord_conventions, GL_ARB_fragment_layer_viewport, 
    GL_ARB_fragment_shader, GL_ARB_framebuffer_no_attachments, 
    GL_ARB_framebuffer_object, GL_ARB_framebuffer_sRGB, 
    GL_ARB_get_program_binary, GL_ARB_get_texture_sub_image, 
    GL_ARB_gpu_shader5, GL_ARB_gpu_shader_fp64, GL_ARB_gpu_shader_int64, 
    GL_ARB_half_float_pixel, GL_ARB_half_float_vertex, 
    GL_ARB_indirect_parameters, GL_ARB_instanced_arrays, 
    GL_ARB_internalformat_query, GL_ARB_internalformat_query2, 
    GL_ARB_invalidate_subdata, GL_ARB_map_buffer_alignment, 
    GL_ARB_map_buffer_range, GL_ARB_multi_bind, GL_ARB_multi_draw_indirect, 
    GL_ARB_occlusion_query2, GL_ARB_parallel_shader_compile, 
    GL_ARB_pipeline_statistics_query, GL_ARB_pixel_buffer_object, 
    GL_ARB_point_sprite, GL_ARB_polygon_offset_clamp, 
    GL_ARB_program_interface_query, GL_ARB_provoking_vertex, 
    GL_ARB_query_buffer_object, GL_ARB_robust_buffer_access_behavior, 
    GL_ARB_robustness, GL_ARB_sample_shading, GL_ARB_sampler_objects, 
    GL_ARB_seamless_cube_map, GL_ARB_seamless_cubemap_per_texture, 
    GL_ARB_separate_shader_objects, GL_ARB_shader_atomic_counter_ops, 
    GL_ARB_shader_atomic_counters, GL_ARB_shader_ballot, 
    GL_ARB_shader_bit_encoding, GL_ARB_shader_clock, 
    GL_ARB_shader_draw_parameters, GL_ARB_shader_group_vote, 
    GL_ARB_shader_image_load_store, GL_ARB_shader_image_size, 
    GL_ARB_shader_objects, GL_ARB_shader_precision, 
    GL_ARB_shader_storage_buffer_object, GL_ARB_shader_subroutine, 
    GL_ARB_shader_texture_image_samples, GL_ARB_shader_texture_lod, 
    GL_ARB_shader_viewport_layer_array, GL_ARB_shading_language_420pack, 
    GL_ARB_shading_language_packing, GL_ARB_stencil_texturing, GL_ARB_sync, 
    GL_ARB_tessellation_shader, GL_ARB_texture_barrier, 
    GL_ARB_texture_buffer_object, GL_ARB_texture_buffer_object_rgb32, 
    GL_ARB_texture_buffer_range, GL_ARB_texture_compression_bptc, 
    GL_ARB_texture_compression_rgtc, GL_ARB_texture_cube_map_array, 
    GL_ARB_texture_filter_anisotropic, GL_ARB_texture_float, 
    GL_ARB_texture_gather, GL_ARB_texture_mirror_clamp_to_edge, 
    GL_ARB_texture_multisample, GL_ARB_texture_non_power_of_two, 
    GL_ARB_texture_query_levels, GL_ARB_texture_query_lod, 
    GL_ARB_texture_rectangle, GL_ARB_texture_rg, GL_ARB_texture_rgb10_a2ui, 
    GL_ARB_texture_stencil8, GL_ARB_texture_storage, 
    GL_ARB_texture_storage_multisample, GL_ARB_texture_swizzle, 
    GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_transform_feedback2, 
    GL_ARB_transform_feedback3, GL_ARB_transform_feedback_instanced, 
    GL_ARB_transform_feedback_overflow_query, GL_ARB_uniform_buffer_object, 
    GL_ARB_vertex_array_bgra, GL_ARB_vertex_array_object, 
    GL_ARB_vertex_attrib_64bit, GL_ARB_vertex_attrib_binding, 
    GL_ARB_vertex_buffer_object, GL_ARB_vertex_shader, 
    GL_ARB_vertex_type_10f_11f_11f_rev, GL_ARB_vertex_type_2_10_10_10_rev, 
    GL_ARB_viewport_array, GL_ATI_blend_equation_separate, 
    GL_ATI_texture_float, GL_EXT_abgr, GL_EXT_blend_equation_separate, 
    GL_EXT_draw_buffers2, GL_EXT_draw_instanced, GL_EXT_framebuffer_blit, 
    GL_EXT_framebuffer_multisample, GL_EXT_framebuffer_multisample_blit_scaled, 
    GL_EXT_framebuffer_object, GL_EXT_framebuffer_sRGB, 
    GL_EXT_packed_depth_stencil, GL_EXT_packed_float, 
    GL_EXT_pixel_buffer_object, GL_EXT_polygon_offset_clamp, 
    GL_EXT_provoking_vertex, GL_EXT_shader_framebuffer_fetch_non_coherent, 
    GL_EXT_shader_integer_mix, GL_EXT_shader_samples_identical, 
    GL_EXT_texture_array, GL_EXT_texture_compression_dxt1, 
    GL_EXT_texture_compression_rgtc, GL_EXT_texture_compression_s3tc, 
    GL_EXT_texture_filter_anisotropic, GL_EXT_texture_integer, 
    GL_EXT_texture_sRGB, GL_EXT_texture_sRGB_R8, GL_EXT_texture_sRGB_decode, 
    GL_EXT_texture_shadow_lod, GL_EXT_texture_shared_exponent, 
    GL_EXT_texture_snorm, GL_EXT_texture_swizzle, GL_EXT_timer_query, 
    GL_EXT_transform_feedback, GL_EXT_vertex_array_bgra, 
    GL_EXT_vertex_attrib_64bit, GL_IBM_multimode_draw_arrays, 
    GL_INTEL_performance_query, GL_KHR_blend_equation_advanced, 
    GL_KHR_context_flush_control, GL_KHR_debug, GL_KHR_no_error, 
    GL_KHR_parallel_shader_compile, GL_KHR_robust_buffer_access_behavior, 
    GL_KHR_robustness, GL_MESA_framebuffer_flip_y, GL_MESA_pack_invert, 
    GL_MESA_shader_integer_functions, GL_MESA_texture_signed_rgba, 
    GL_NV_compute_shader_derivatives, GL_NV_conditional_render, 
    GL_NV_depth_clamp, GL_NV_packed_depth_stencil, GL_NV_texture_barrier, 
    GL_OES_EGL_image, GL_S3_s3tc

OpenGL version string: 3.0 Mesa 19.2.1
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
    GL_3DFX_texture_compression_FXT1, GL_AMD_conservative_depth, 
    GL_AMD_draw_buffers_blend, GL_AMD_multi_draw_indirect, 
    GL_AMD_query_buffer_object, GL_AMD_seamless_cubemap_per_texture, 
    GL_AMD_shader_trinary_minmax, GL_AMD_texture_texture4, 
    GL_ANGLE_texture_compression_dxt3, GL_ANGLE_texture_compression_dxt5, 
    GL_APPLE_object_purgeable, GL_APPLE_packed_pixels, 
    GL_ARB_ES2_compatibility, GL_ARB_ES3_1_compatibility, 
    GL_ARB_ES3_compatibility, GL_ARB_arrays_of_arrays, 
    GL_ARB_blend_func_extended, GL_ARB_buffer_storage, 
    GL_ARB_clear_buffer_object, GL_ARB_clear_texture, GL_ARB_clip_control, 
    GL_ARB_color_buffer_float, GL_ARB_compressed_texture_pixel_storage, 
    GL_ARB_compute_shader, GL_ARB_conditional_render_inverted, 
    GL_ARB_conservative_depth, GL_ARB_copy_buffer, GL_ARB_copy_image, 
    GL_ARB_cull_distance, GL_ARB_debug_output, GL_ARB_depth_buffer_float, 
    GL_ARB_depth_clamp, GL_ARB_depth_texture, GL_ARB_derivative_control, 
    GL_ARB_draw_buffers, GL_ARB_draw_buffers_blend, 
    GL_ARB_draw_elements_base_vertex, GL_ARB_draw_indirect, 
    GL_ARB_draw_instanced, GL_ARB_explicit_attrib_location, 
    GL_ARB_explicit_uniform_location, GL_ARB_fragment_coord_conventions, 
    GL_ARB_fragment_layer_viewport, GL_ARB_fragment_program, 
    GL_ARB_fragment_program_shadow, GL_ARB_fragment_shader, 
    GL_ARB_framebuffer_no_attachments, GL_ARB_framebuffer_object, 
    GL_ARB_framebuffer_sRGB, GL_ARB_get_program_binary, 
    GL_ARB_get_texture_sub_image, GL_ARB_half_float_pixel, 
    GL_ARB_half_float_vertex, GL_ARB_indirect_parameters, 
    GL_ARB_instanced_arrays, GL_ARB_internalformat_query, 
    GL_ARB_internalformat_query2, GL_ARB_invalidate_subdata, 
    GL_ARB_map_buffer_alignment, GL_ARB_map_buffer_range, GL_ARB_multi_bind, 
    GL_ARB_multi_draw_indirect, GL_ARB_multisample, GL_ARB_multitexture, 
    GL_ARB_occlusion_query, GL_ARB_occlusion_query2, 
    GL_ARB_parallel_shader_compile, GL_ARB_pipeline_statistics_query, 
    GL_ARB_pixel_buffer_object, GL_ARB_point_parameters, GL_ARB_point_sprite, 
    GL_ARB_polygon_offset_clamp, GL_ARB_program_interface_query, 
    GL_ARB_provoking_vertex, GL_ARB_query_buffer_object, 
    GL_ARB_robust_buffer_access_behavior, GL_ARB_robustness, 
    GL_ARB_sample_shading, GL_ARB_sampler_objects, GL_ARB_seamless_cube_map, 
    GL_ARB_seamless_cubemap_per_texture, GL_ARB_separate_shader_objects, 
    GL_ARB_shader_atomic_counter_ops, GL_ARB_shader_atomic_counters, 
    GL_ARB_shader_ballot, GL_ARB_shader_bit_encoding, GL_ARB_shader_clock, 
    GL_ARB_shader_draw_parameters, GL_ARB_shader_group_vote, 
    GL_ARB_shader_image_load_store, GL_ARB_shader_image_size, 
    GL_ARB_shader_objects, GL_ARB_shader_precision, 
    GL_ARB_shader_storage_buffer_object, GL_ARB_shader_texture_image_samples, 
    GL_ARB_shader_texture_lod, GL_ARB_shading_language_100, 
    GL_ARB_shading_language_420pack, GL_ARB_shading_language_packing, 
    GL_ARB_shadow, GL_ARB_stencil_texturing, GL_ARB_sync, 
    GL_ARB_texture_barrier, GL_ARB_texture_border_clamp, 
    GL_ARB_texture_compression, GL_ARB_texture_compression_bptc, 
    GL_ARB_texture_compression_rgtc, GL_ARB_texture_cube_map, 
    GL_ARB_texture_cube_map_array, GL_ARB_texture_env_add, 
    GL_ARB_texture_env_combine, GL_ARB_texture_env_crossbar, 
    GL_ARB_texture_env_dot3, GL_ARB_texture_filter_anisotropic, 
    GL_ARB_texture_float, GL_ARB_texture_gather, 
    GL_ARB_texture_mirror_clamp_to_edge, GL_ARB_texture_mirrored_repeat, 
    GL_ARB_texture_multisample, GL_ARB_texture_non_power_of_two, 
    GL_ARB_texture_query_levels, GL_ARB_texture_query_lod, 
    GL_ARB_texture_rectangle, GL_ARB_texture_rg, GL_ARB_texture_rgb10_a2ui, 
    GL_ARB_texture_stencil8, GL_ARB_texture_storage, 
    GL_ARB_texture_storage_multisample, GL_ARB_texture_swizzle, 
    GL_ARB_texture_view, GL_ARB_timer_query, GL_ARB_transform_feedback2, 
    GL_ARB_transform_feedback3, GL_ARB_transform_feedback_instanced, 
    GL_ARB_transform_feedback_overflow_query, GL_ARB_transpose_matrix, 
    GL_ARB_uniform_buffer_object, GL_ARB_vertex_array_bgra, 
    GL_ARB_vertex_array_object, GL_ARB_vertex_attrib_binding, 
    GL_ARB_vertex_buffer_object, GL_ARB_vertex_program, GL_ARB_vertex_shader, 
    GL_ARB_vertex_type_10f_11f_11f_rev, GL_ARB_vertex_type_2_10_10_10_rev, 
    GL_ARB_window_pos, GL_ATI_blend_equation_separate, GL_ATI_draw_buffers, 
    GL_ATI_separate_stencil, GL_ATI_texture_env_combine3, 
    GL_ATI_texture_float, GL_EXT_abgr, GL_EXT_bgra, GL_EXT_blend_color, 
    GL_EXT_blend_equation_separate, GL_EXT_blend_func_separate, 
    GL_EXT_blend_minmax, GL_EXT_blend_subtract, GL_EXT_compiled_vertex_array, 
    GL_EXT_copy_texture, GL_EXT_draw_buffers2, GL_EXT_draw_instanced, 
    GL_EXT_draw_range_elements, GL_EXT_fog_coord, GL_EXT_framebuffer_blit, 
    GL_EXT_framebuffer_multisample, GL_EXT_framebuffer_multisample_blit_scaled, 
    GL_EXT_framebuffer_object, GL_EXT_framebuffer_sRGB, 
    GL_EXT_gpu_program_parameters, GL_EXT_multi_draw_arrays, 
    GL_EXT_packed_depth_stencil, GL_EXT_packed_float, GL_EXT_packed_pixels, 
    GL_EXT_pixel_buffer_object, GL_EXT_point_parameters, 
    GL_EXT_polygon_offset_clamp, GL_EXT_provoking_vertex, 
    GL_EXT_rescale_normal, GL_EXT_secondary_color, 
    GL_EXT_separate_specular_color, 
    GL_EXT_shader_framebuffer_fetch_non_coherent, GL_EXT_shader_integer_mix, 
    GL_EXT_shader_samples_identical, GL_EXT_shadow_funcs, 
    GL_EXT_stencil_two_side, GL_EXT_stencil_wrap, GL_EXT_subtexture, 
    GL_EXT_texture, GL_EXT_texture3D, GL_EXT_texture_array, 
    GL_EXT_texture_compression_dxt1, GL_EXT_texture_compression_rgtc, 
    GL_EXT_texture_compression_s3tc, GL_EXT_texture_cube_map, 
    GL_EXT_texture_edge_clamp, GL_EXT_texture_env_add, 
    GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3, 
    GL_EXT_texture_filter_anisotropic, GL_EXT_texture_integer, 
    GL_EXT_texture_lod_bias, GL_EXT_texture_object, GL_EXT_texture_rectangle, 
    GL_EXT_texture_sRGB, GL_EXT_texture_sRGB_R8, GL_EXT_texture_sRGB_decode, 
    GL_EXT_texture_shadow_lod, GL_EXT_texture_shared_exponent, 
    GL_EXT_texture_snorm, GL_EXT_texture_swizzle, GL_EXT_timer_query, 
    GL_EXT_transform_feedback, GL_EXT_vertex_array, GL_EXT_vertex_array_bgra, 
    GL_IBM_multimode_draw_arrays, GL_IBM_rasterpos_clip, 
    GL_IBM_texture_mirrored_repeat, GL_INGR_blend_func_separate, 
    GL_INTEL_performance_query, GL_KHR_blend_equation_advanced, 
    GL_KHR_context_flush_control, GL_KHR_debug, GL_KHR_no_error, 
    GL_KHR_parallel_shader_compile, GL_KHR_robust_buffer_access_behavior, 
    GL_KHR_robustness, GL_MESA_pack_invert, GL_MESA_shader_integer_functions, 
    GL_MESA_texture_signed_rgba, GL_MESA_window_pos, GL_NV_blend_square, 
    GL_NV_compute_shader_derivatives, GL_NV_conditional_render, 
    GL_NV_depth_clamp, GL_NV_fog_distance, GL_NV_light_max_exponent, 
    GL_NV_packed_depth_stencil, GL_NV_primitive_restart, 
    GL_NV_texgen_reflection, GL_NV_texture_barrier, 
    GL_NV_texture_env_combine4, GL_NV_texture_rectangle, GL_OES_EGL_image, 
    GL_OES_read_format, GL_S3_s3tc, GL_SGIS_generate_mipmap, 
    GL_SGIS_texture_border_clamp, GL_SGIS_texture_edge_clamp, 
    GL_SGIS_texture_lod, GL_SUN_multi_draw_arrays

OpenGL ES profile version string: OpenGL ES 3.1 Mesa 19.2.1
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10
OpenGL ES profile extensions:
    GL_ANGLE_texture_compression_dxt3, GL_ANGLE_texture_compression_dxt5, 
    GL_APPLE_texture_max_level, GL_EXT_base_instance, 
    GL_EXT_blend_func_extended, GL_EXT_blend_minmax, GL_EXT_buffer_storage, 
    GL_EXT_clip_control, GL_EXT_clip_cull_distance, GL_EXT_color_buffer_float, 
    GL_EXT_compressed_ETC1_RGB8_sub_texture, GL_EXT_copy_image, 
    GL_EXT_depth_clamp, GL_EXT_discard_framebuffer, 
    GL_EXT_disjoint_timer_query, GL_EXT_draw_buffers, 
    GL_EXT_draw_buffers_indexed, GL_EXT_draw_elements_base_vertex, 
    GL_EXT_float_blend, GL_EXT_frag_depth, GL_EXT_geometry_point_size, 
    GL_EXT_geometry_shader, GL_EXT_gpu_shader5, GL_EXT_map_buffer_range, 
    GL_EXT_multi_draw_arrays, GL_EXT_occlusion_query_boolean, 
    GL_EXT_polygon_offset_clamp, GL_EXT_primitive_bounding_box, 
    GL_EXT_read_format_bgra, GL_EXT_render_snorm, GL_EXT_robustness, 
    GL_EXT_sRGB_write_control, GL_EXT_separate_shader_objects, 
    GL_EXT_shader_framebuffer_fetch_non_coherent, 
    GL_EXT_shader_implicit_conversions, GL_EXT_shader_integer_mix, 
    GL_EXT_shader_io_blocks, GL_EXT_shader_samples_identical, 
    GL_EXT_tessellation_point_size, GL_EXT_tessellation_shader, 
    GL_EXT_texture_border_clamp, GL_EXT_texture_buffer, 
    GL_EXT_texture_compression_bptc, GL_EXT_texture_compression_dxt1, 
    GL_EXT_texture_compression_rgtc, GL_EXT_texture_compression_s3tc, 
    GL_EXT_texture_compression_s3tc_srgb, GL_EXT_texture_cube_map_array, 
    GL_EXT_texture_filter_anisotropic, GL_EXT_texture_format_BGRA8888, 
    GL_EXT_texture_norm16, GL_EXT_texture_query_lod, GL_EXT_texture_rg, 
    GL_EXT_texture_sRGB_R8, GL_EXT_texture_sRGB_decode, 
    GL_EXT_texture_shadow_lod, GL_EXT_texture_type_2_10_10_10_REV, 
    GL_EXT_texture_view, GL_EXT_unpack_subimage, GL_INTEL_performance_query, 
    GL_KHR_blend_equation_advanced, GL_KHR_context_flush_control, 
    GL_KHR_debug, GL_KHR_no_error, GL_KHR_parallel_shader_compile, 
    GL_KHR_robust_buffer_access_behavior, GL_KHR_robustness, 
    GL_MESA_framebuffer_flip_y, GL_MESA_shader_integer_functions, 
    GL_NV_conditional_render, GL_NV_draw_buffers, GL_NV_fbo_color_attachments, 
    GL_NV_image_formats, GL_NV_read_buffer, GL_NV_read_depth, 
    GL_NV_read_depth_stencil, GL_NV_read_stencil, GL_OES_EGL_image, 
    GL_OES_EGL_image_external, GL_OES_EGL_image_external_essl3, 
    GL_OES_EGL_sync, GL_OES_compressed_ETC1_RGB8_texture, GL_OES_copy_image, 
    GL_OES_depth24, GL_OES_depth_texture, GL_OES_depth_texture_cube_map, 
    GL_OES_draw_buffers_indexed, GL_OES_draw_elements_base_vertex, 
    GL_OES_element_index_uint, GL_OES_fbo_render_mipmap, 
    GL_OES_geometry_point_size, GL_OES_geometry_shader, 
    GL_OES_get_program_binary, GL_OES_gpu_shader5, GL_OES_mapbuffer, 
    GL_OES_packed_depth_stencil, GL_OES_primitive_bounding_box, 
    GL_OES_required_internalformat, GL_OES_rgb8_rgba8, GL_OES_sample_shading, 
    GL_OES_sample_variables, GL_OES_shader_image_atomic, 
    GL_OES_shader_io_blocks, GL_OES_shader_multisample_interpolation, 
    GL_OES_standard_derivatives, GL_OES_stencil8, GL_OES_surfaceless_context, 
    GL_OES_tessellation_point_size, GL_OES_tessellation_shader, 
    GL_OES_texture_3D, GL_OES_texture_border_clamp, GL_OES_texture_buffer, 
    GL_OES_texture_cube_map_array, GL_OES_texture_float, 
    GL_OES_texture_float_linear, GL_OES_texture_half_float, 
    GL_OES_texture_half_float_linear, GL_OES_texture_npot, 
    GL_OES_texture_stencil8, GL_OES_texture_storage_multisample_2d_array, 
    GL_OES_texture_view, GL_OES_vertex_array_object, GL_OES_vertex_half_float, 
    GL_OES_viewport_array
badidea
Posts: 2586
Joined: May 24, 2007 22:10
Location: The Netherlands

Re: libOpenB3D Win32/64 Linux32/64

Post by badidea »

D.J.Peters wrote:
D.J.Peters wrote:I will lock for a workaround !
Done :-)

Joshy

Code: Select all

var aBrush = LoadBrush("./mediaX/brick-c.png")
if len(*TextureName(GetBrushTexture(aBrush)))=0 then
  screen 0 : print "fatal error: loading './media/brick-c.png' !"
  beep:sleep:end 1
end if

Code: Select all

var sFileName = "./media/ninja.b3d"
if open(sFileName,for input as #99) then
  screen 0 : print "fatal error: can't load '" & sFileName & "' !"
  beep : sleep :end 1
else
  close #99
end if  
var aAnimMesh = LoadAnimMesh(sFileName)
Note that there are similar cases where the test if 0 does not work:

LoadAnimMesh()
- AnimMesh.bas

LoadSprite()
- EmitterParticleBatch.bas
- EmitterParticleTrail.bas
- EmitterVariance.bas

LoadTexture()
- Shader02.bas

LoadBrush()
- Shadow.bas
- ShadowNew.bas

This one seems to work fine however:

LoadMesh()
- LoadMesh.bas
D.J.Peters
Posts: 8586
Joined: May 28, 2005 3:28
Contact:

Re: libOpenB3D Win32/64 Linux32/64

Post by D.J.Peters »

badidea wrote:It does not look so good
Strange it is simple and "old" OpenGL 2.0 stuff from 2004 !
https://www.khronos.org/opengl/wiki/History_of_OpenGL

May be something are wrong with your OpenGL driver setup !

But thank you for testing.

Joshy
D.J.Peters
Posts: 8586
Joined: May 28, 2005 3:28
Contact:

Re: libOpenB3D Win32/64 Linux32/64

Post by D.J.Peters »

Only for fun and to compare GPU vs CPU speed I wrote a "simple" CPU mandelbrot explorer also .

[ESCAPE] and [X] window close button = quit
cursor keys move around
[LEFT]
[RIGHT]
[UP]
[DOWN]
[+][-] zoom in/out
[r] = reset

Joshy

click to enlarge:
Image
file: mandelbrot_cpu.bas

Code: Select all

' mandelbrot_cpu.bas
const as integer MAX_ITERA = 256

sub DrawMandelbrot(CenterX as single, _
                   CenterY as single, _
                   Zoom    as single)
  dim as integer frame,fps,iY,iX,i
  dim as single xStart,yStart,cx,cy,xStep,yStep,ratio
  dim as single zx,zy,x2,y2,xy,mWidth,mHeight               
  dim as integer iWidth,iHeight,iBytes,iPitch
  dim as ubyte ptr row,pixel
  row=screenptr() : if row=0 then exit sub
  screeninfo iWidth,iHeight,,iBytes,iPitch
  if iBytes<>1 then exit sub
  
  ratio=iWidth/iHeight : mWidth=Zoom*ratio :  mHeight=Zoom
  yStart=-mHeight/2+centerY : yStep=mHeight/iHeight
  xStart=-mWidth /2+centerX : xStep=mWidth /iWidth
  iY=0 : cy=yStart
  while iY<iHeight 
    iX=0 : cx=xStart : pixel=row    
    while iX<iWidth
      i=0:zx=0:zy=0
      while i<MAX_ITERA
        x2=zx*zx : y2=zy*zy : if x2 + y2 >4 then exit while        
        xy=2*zx*zy : zx=x2-y2+cx : zy=xy+cy : i+=1      
      wend
      if i=MAX_ITERA then *pixel=0 else *pixel=i
      ' next pixel
      pixel+=1 : iX+=1 : cx+=xStep
    wend ' next row
    row+=iPitch : iY+=1: cy+=yStep
  wend
  
end sub


chdir exepath

dim as integer iWidth  = 640
dim as integer iHeight = 480
screeninfo iWidth, iHeight : iWidth*=.5 : iHeight*=.5
screenres iWidth, iHeight,8,2
screenset 1
for i as integer = 0 to 255
  dim as double w = i
  dim as double r = (sin(w)+1)*.5
  dim as double g = (cos(w)+1)*.5
  dim as double b = (sin(w*r*g)+1)*.5
  palette i,r*255,g*255,b*255
next  
palette 0,0,0,0
setmouse iWidth\2,iHeight\2
dim as integer frame,fps,mx,my,mz,mb
dim as single zoom=4,centerX,centerY
dim as boolean bExit, bClose, bDraw=true
dim as double tLast = Timer(),tNow

while bExit = false andalso bClose = false ' [x] window close button
  var sKey = inkey()
  var iKey = len(sKey)
  if iKey then
    bDraw=true
    iKey-=1:iKey=sKey[iKey]+iKey*256
    select case as const iKey
    case   27 : bExit   = true      ' [ESC]
    case   43 : Zoom   *= 0.99      ' [+] zoom in
    case   45 : Zoom   *= 1.01      ' [-] zoom out
    case  114 : Zoom    = 4.0       ' [r]eset
              : CenterX = 0.0 
              : CenterY = 0.0  
    case  328 : CenterY-= 0.01*Zoom ' [up]
    case  331 : CenterX-= 0.01*Zoom ' [left]
    case  333 : CenterX+= 0.01*Zoom ' [right]
    case  336 : CenterY+= 0.01*Zoom ' [down]
    case  363 : bClose = true       ' [X] window close button
    case else : bDraw  = false 
    end select
  end if
  if bDraw then DrawMandelbrot(CenterX,CenterY,Zoom):bDraw=false:flip
  frame+=1
  if frame mod 10=0 then
    tNow=Timer() : fps = 10/(tNow-tLast) : tLast=tNow
    WindowTitle "fps: " & fps
  end if 
  sleep 10
wend   
'bsave "mandelbrotcpu.bmp",0
Last edited by D.J.Peters on Oct 12, 2022 18:16, edited 1 time in total.
Gunslinger
Posts: 103
Joined: Mar 08, 2016 19:10
Location: The Netherlands

Re: libOpenB3D Win32/64 Linux32/64

Post by Gunslinger »

Hello again, i have modified Tokamak physics example for OpenB3D
viewtopic.php?f=14&t=25110&p=237993&hil ... ak#p237993

I had to change TransformEntity in openB3D.bi
Declare sub TransformEntity(byval _Entity as tEntity ptr, byval as const single)
to
Declare sub TransformEntity(byval _Entity as tEntity ptr, byval pMatrix4x4 as single ptr)
i don't see how i can use a const single?

modded test02.bas for openB3d

Code: Select all

#include once "openb3d.bi"
'#include once "fbgfx.bi"
'#include once "horde3d.bi"
#include once "tokamak-c.bi"
const as ushort screenx = 1920
const as ushort screeny = 1080
const as ushort screenxh = screenx/2
const as ushort screenyh = screeny/2
type AnimatedBody as neAnimatedBody ptr
type RigidBody    as neRigidBody ptr
screenres screenx,screeny, 32, , &h10002
Graphics3d screenx,screeny

const NBODIES = 100
dim as neSimulatorSizeInfo SizeInfo
with SizeInfo
  .rigidBodiesCount     = NBODIES
  .animatedBodiesCount  = 1
  .geometriesCount      = .rigidBodiesCount + .animatedBodiesCount
  .overlappedPairsCount = (.geometriesCount*(.geometriesCount-1))/2
end with  

var sim = CreateSimulator(SizeInfo)
if sim=NULL then
  screen 0
  print "error: CreateSimulator() !"
  beep : sleep : end 1
end if

var camera=createcamera()
	PositionEntity camera,0,15,10
	CameraFogColor camera,0,.2,.3
	CameraCLSColor camera,0,.2,.3
	CameraFogRange camera,10,80
	CameraRange camera,1,1500
	CameraFogMode camera,1
	
var	sun=CreateLight( 2)
	RotateEntity sun,0,-180,0
	PositionEntity sun,50,100,0
	LightColor sun, .055,.055,.055
	AmbientLight .5,.5,.5

var platformNode = CreateCylinder(20)
	scaleentity platformNode,77,2,77
	Positionentity platformNode, 0,-2,0
	

var platformBody = CreateAnimatedBodyBox(sim,150,2,150)
AnimatedBodySetPosition(platformBody,0,-1,0)

const MAX_CUBES = NBODIES
const SQR_CUBES = sqr(MAX_CUBES)
dim as any ptr   cubeNode(MAX_CUBES-1)
dim as RigidBody cubeBody(MAX_CUBES-1)
dim as any ptr   cubeShadow(MAX_CUBES-1)
dim as single matrix(15)
dim as single ptr transform = @matrix(0)
dim as integer frames

for i as integer = 0 to MAX_CUBES-1 step 1
  if rnd >.5 then
    cubeNode(i) = Createcube()
    cubeBody(i) = CreateRigidBodyBox(sim)
  else
    cubeNode(i) = CreateSphere()
    cubeBody(i) = CreateRigidBodySphere(sim)
  end if
  var colum = i \ SQR_CUBES
  var row = i mod SQR_CUBES
  RigidBodySetPosition(cubeBody(i),-SQR_CUBES\3 + colum*1.2 + (i and 1)*0.5,  .5+row,  0)
  RigidBodyGetOpenGLMatrix(cubeBody(i),transform) ': matrix(14)*=-1
  TransformEntity cubeNode(i),transform 
  'RigidBodySetMass(cubeBody(i),rnd*100)
  'PositionEntity (cubeNode(i),-SQR_CUBES\2 + colum*1.2 + (i and 1)*0.5,  .5+row,  0)
  Scaleentity cubeNode(i),.5,.5,.5
  'entitycolor cubeNode(i),rnd,rnd,.5
  meshcullradius cubeNode(i),10
  cubeShadow(i) = CreateShadow(cubeNode(i))
next



while inkey()=""
  frames+=1
  SimulatorAdvance(sim)
  if frames mod 2=0 then
    for i as integer = 0 to MAX_CUBES-1
      RigidBodyGetOpenGLMatrix(cubeBody(i),transform) ': matrix(14)*=-1
      TransformEntity cubeNode(i),transform
      if RigidBodyIsIdle(cubeBody(i)) then entitycolor cubeNode(i),1,.5,1 else entitycolor cubeNode(i),1,0,.5
    next
  end if
PointEntity camera,cubeNode(MAX_CUBES/2-1)

  updateworld
  renderworld
  flip
 ' ScreenSync
   sleep 10
wend

DestroySimulator(sim)
Gunslinger
Posts: 103
Joined: Mar 08, 2016 19:10
Location: The Netherlands

Re: libOpenB3D Win32/64 Linux32/64

Post by Gunslinger »

Hey Joshy, can you help me with ARM?
I just got a raspberry pi (3b+ debian OS)
Then installed freebasic for linux-arm and successfully compiled freebasic examples openGL.

So i did think that i can compile libOpenB3D (most of my projects are.)
But the header says no ARM. after removing that check i get a error: Incompatible ./linOpenB3D.so

I have no knowledge of linux or ARM it seems possible?
If openGL can run why not openB3D on ARM.
Is it just building a ARM lib or is there to it?

Note: also having problems with your first post download links
D.J.Peters
Posts: 8586
Joined: May 28, 2005 3:28
Contact:

Re: libOpenB3D Win32/64 Linux32/64

Post by D.J.Peters »

Gunslinger wrote:Is it just building a ARM lib or is there to it?
first you have to install Code::Blocks IDE
download libOpenB3D-1.25-src.zip (see first post)
and recompile the Linux 32-bit project on your ARM device

Joshy
Gunslinger
Posts: 103
Joined: Mar 08, 2016 19:10
Location: The Netherlands

Re: libOpenB3D Win32/64 Linux32/64

Post by Gunslinger »

Thanks for your reply.
Zo far i got only win64 dll build succes full.
On win10 64 bit. Any other build it missing lots of stuff.
This is going to take sone time to learn how to set it up.
D.J.Peters
Posts: 8586
Joined: May 28, 2005 3:28
Contact:

Re: libOpenB3D Win32/64 Linux32/64

Post by D.J.Peters »

@Gunslinger you don't need to recompile win32/win64 or linux32/64 on a PC
only compile the linux 32-bit codeblocks project on your ARM device !

Joshy
Gunslinger
Posts: 103
Joined: Mar 08, 2016 19:10
Location: The Netherlands

Re: libOpenB3D Win32/64 Linux32/64

Post by Gunslinger »

D.J.Peters wrote:@Gunslinger you don't need to recompile win32/win64 or linux32/64 on a PC
only compile the linux 32-bit codeblocks project on your ARM device !

Joshy
I cave up on that. I dont seem to get code blocks IDE for now.
Also installed ubuntu 64bit on raspberry but got arm64 structuur.
Gunslinger
Posts: 103
Joined: Mar 08, 2016 19:10
Location: The Netherlands

Re: libOpenB3D Win32/64 Linux32/64

Post by Gunslinger »

Found a probleem in openb3d.bi file

Code: Select all

declare sub      ClearSurface (byval _Surface as tSurface ptr, _
                               byval bClearAllVertices  as long = true, _
                               byval bClearAllTriangles as long = true)
needs to be

Code: Select all

declare sub      ClearSurface (byval _Surface as tSurface ptr, _
                               byval bClearAllVertices  as long = 1, _
                               byval bClearAllTriangles as long = 1)
Post Reply