Wings 3D Development Forum
Why is minor component displayed at left ? - Printable Version

+- Wings 3D Development Forum (https://www.wings3d.com/forum)
+-- Forum: Wings 3D (https://www.wings3d.com/forum/forumdisplay.php?fid=1)
+--- Forum: Gripes & Grumbles (https://www.wings3d.com/forum/forumdisplay.php?fid=4)
+--- Thread: Why is minor component displayed at left ? (/showthread.php?tid=1369)



Why is minor component displayed at left ? - ggaliens - 09-12-2015

Code:
minor_gl_version() ->
    Major = 2,
    Minor = 1,
    Req = {Major,Minor,0},
    case ets:lookup(wings_gl_ext, version) of
    [{_,VerTuple}] when VerTuple < Req ->
        fatal("Wings3D requires OpenGL ~p.~p or higher.",
          [Minor,Major]);
    _ ->
        ok
    end.



RE: Why is minor component displayed at left ? - micheus - 09-12-2015

ggaliens, if you are coming to work in wx development version I recommend you follow the proper bug's thread. Wink

That was fixed in accord wit this post: http://www.wings3d.com/forum/showthread.php?tid=1360&pid=7861#pid7861
As well as you can fix by trying to keep your branch updated by following the Don't branch at git: https://github.com/dgud/wings/commit/6450f6118c533db48d386e92477994b76898b591

It's the the way I have been doing . Smile


RE: Why is minor component displayed at left ? - ggaliens - 09-19-2015

Micheus ... Dan ... I think I'm seeing a potential weakness in OpenGL version vetting ...
Look at this testing I have done on command line ...

Code:
1> {2,1} < {3,1,2}.
true
2> {2,1} < {2,1,2}.
true
3> {2,1} < {2,0,2}.
true
4>

My thought would be to put in an "assertion" that both tuples are three tuples ... else toss in a fatal.
Anyways ... I'm going to try to PUSH an improved version for you guys to ponder.

Maybe something like this is better ...

Code:
minor_gl_version() ->
    Major = 2,
    Minor = 1,
    Req = {Major,Minor,0},
    case ets:lookup(wings_gl_ext, version) of
    [{_,{MajorCurrent,MinorCurrent,_}=VerTuple}] when VerTuple < Req ->
        fatal("Wings3D requires OpenGL ~p.~p or higher.\nYour available version ~p.~p",
          [Major,Minor,   MajorCurrent,MinorCurrent]);
    [{_,{_,_,_}=_VerTuple}]  ->  % assert that a 3 tuple is returned as expected
        ok;
    Unexpected ->
        fatal("Unexpected current OpenGL info : ~p", [ Unexpected ])
    end.



RE: Why is minor component displayed at left ? - micheus - 09-19-2015

ggaliens, there is no reason for all that extra code you want to add:
Code:
[{_,{_,_,_}=_VerTuple}]  ->  % assert that a 3 tuple is returned as expected
        ok;
    Unexpected ->
        fatal("Unexpected current OpenGL info : ~p", [ Unexpected ])

The version tuple is already ensured to have three elements. Just look in wings_gl.erl - init_extensions/0, where the version is stored:
Code:
init_extensions() ->
    ets:new(wings_gl_ext, [named_table,public,ordered_set]),
    Exts0 = lists:sort(string:tokens(gl:getString(?GL_EXTENSIONS), " ")),
    Exts = [{list_to_atom(E)} || E <- Exts0],
    ets:insert(wings_gl_ext, Exts),
    Ver = case catch get_version() of
          {_,_,_}=V -> V;
          _ -> {1,1,0}
      end,
    ets:insert(wings_gl_ext, {version,Ver}).



RE: Why is minor component displayed at left ? - ggaliens - 09-19-2015

Each unit of code should be a bit independent when possible. Assumptions that cut across modules are ugly.

I find aspects of init_extentions to also be scary. If the items besides major and minor version can be hard to predict ... why try to cast this stuff to zero 0 ? Just catch what is there and pass it on to the next consumer.

Then just let the compare happen on two digits. That should be enough.