libOpenB3D Win32/64 Linux32/64

External libraries (GTK, GSL, SDL, Allegro, OpenGL, etc) questions.
D.J.Peters
Posts: 8024
Joined: May 28, 2005 3:28
Contact:

Re: libOpenB3D Win32/64 Linux32/64

Postby D.J.Peters » Feb 06, 2020 3:34

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: 8024
Joined: May 28, 2005 3:28
Contact:

Re: libOpenB3D Win32/64 Linux32/64

Postby D.J.Peters » Feb 06, 2020 14:09

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 Feb 08, 2020 11:56, edited 1 time in total.
badidea
Posts: 2057
Joined: May 24, 2007 22:10
Location: The Netherlands

Re: libOpenB3D Win32/64 Linux32/64

Postby badidea » Feb 06, 2020 18:27

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/mandelbrot_2020-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: 2057
Joined: May 24, 2007 22:10
Location: The Netherlands

Re: libOpenB3D Win32/64 Linux32/64

Postby badidea » Feb 06, 2020 20:14

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: 8024
Joined: May 28, 2005 3:28
Contact:

Re: libOpenB3D Win32/64 Linux32/64

Postby D.J.Peters » Feb 07, 2020 1:07

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: 8024
Joined: May 28, 2005 3:28
Contact:

Re: libOpenB3D Win32/64 Linux32/64

Postby D.J.Peters » Feb 08, 2020 15:11

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
Gunslinger
Posts: 39
Joined: Mar 08, 2016 19:10
Location: The Netherlands

Re: libOpenB3D Win32/64 Linux32/64

Postby Gunslinger » Apr 13, 2020 9:13

Hello again, i have modified Tokamak physics example for OpenB3D
https://www.freebasic.net/forum/viewtopic.php?f=14&t=25110&p=237993&hilit=tokamak#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)

Return to “Libraries”

Who is online

Users browsing this forum: No registered users and 1 guest