• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

タグ
未設定

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Graphics library for Mercury, including OpenGL bindings, TGA image reading, and X11, Win32, and SDL2 windowing and input.


コミットメタ情報

リビジョンc44b3bd3e05bcfadbab2847a05f9ec81d1015f79 (tree)
日時2022-03-21 05:09:28
作者AlaskanEmily <emily@alas...>
コミッターAlaskanEmily

ログメッセージ

Improve GL version parsing

変更サマリ

差分

--- a/saffron.gl.m
+++ b/saffron.gl.m
@@ -121,7 +121,7 @@
121121
122122 :- pred opengl_version_string(Ctx, string, io.io, io.io)
123123 <= saffron.gl.context(Ctx).
124-:- mode opengl_version_string(in, uo, di, uo) is det.
124+:- mode opengl_version_string(in, out, di, uo) is det.
125125
126126 %-----------------------------------------------------------------------------%
127127
@@ -133,7 +133,7 @@
133133
134134 :- pred shader_model_version_string(Ctx, string, io.io, io.io)
135135 <= saffron.gl.context(Ctx).
136-:- mode shader_model_version_string(in, uo, di, uo) is det.
136+:- mode shader_model_version_string(in, out, di, uo) is det.
137137
138138 %-----------------------------------------------------------------------------%
139139
@@ -425,54 +425,56 @@ gl_load_function(gl_load_func_ctx(Ctx), Name, MaybeFunc, !IO) :-
425425
426426 %-----------------------------------------------------------------------------%
427427
428+:- type version_type ---> gl ; glsl.
429+
430+:- pragma foreign_enum("C", version_type/0, [
431+ gl - "GL_VERSION",
432+ glsl - "GL_SHADING_LANGUAGE_VERSION"
433+]).
434+
435+%-----------------------------------------------------------------------------%
436+
437+:- pred version_string(version_type, string, io.io, io.io).
438+:- mode version_string(in, out, di, uo) is det.
439+
428440 :- pragma foreign_proc("C",
429- opengl_version_string(_Ctx::in, Str::uo, IOi::di, IOo::uo),
430- [will_not_call_mercury, promise_pure, thread_safe, will_not_throw_exception],
441+ version_string(Type::in, Str::out, IOi::di, IOo::uo),
442+ [will_not_call_mercury, promise_pure, thread_safe, will_not_throw_exception,
443+ does_not_affect_liveness, may_duplicate],
431444 "
432- const void *ver = glGetString(GL_VERSION);
433- if(glGetError() != GL_NO_ERROR || ver == NULL){
434- ver = ""0.0"";
445+ const char *ver = (char*)glGetString(Type);
446+ if(glGetError() != GL_NO_ERROR || ver == NULL || *ver == 0){
447+ Str = ""0.0"";
448+ }
449+ else{
450+ while(*ver == ' ')
451+ ver++;
452+ MR_Integer len = strspn(ver, ""0123456789."");
453+ Str = MR_GC_malloc_atomic(len + 1);
454+ memcpy(Str, ver, len + 1);
435455 }
436- MR_Integer len = strlen(ver);
437- Str = MR_GC_malloc_atomic(len + 1);
438- memcpy(Str, ver, len + 1);
439456 IOo = IOi;
440457 ").
441458
442459 %-----------------------------------------------------------------------------%
443460
444-:- pragma inline(opengl_version/4).
461+opengl_version_string(Ctx, Str, !IO) :-
462+ saffron.make_current(Ctx, !IO),
463+ version_string(gl, Str, !IO).
464+
465+%-----------------------------------------------------------------------------%
445466
446467 opengl_version(Ctx, saffron.parse_sem_ver(Version), !IO) :-
447- saffron.make_current(Ctx, !IO),
448468 opengl_version_string(Ctx, Version, !IO).
449469
450470 %-----------------------------------------------------------------------------%
451471
452-:- pragma foreign_proc("C",
453- shader_model_version_string(_Ctx::in, VersionString::uo, IOi::di, IOo::uo),
454- [will_not_call_mercury, promise_pure, thread_safe, will_not_throw_exception],
455- "
456- const void *version_string;
457- MR_Integer version_string_len;
458- (void)glGetError();
459- version_string = glGetString(GL_SHADING_LANGUAGE_VERSION);
460- if(glGetError() != GL_NO_ERROR || version_string == NULL){
461- version_string = ""0"";
462- version_string_len = 1;
463- }
464- else{
465- version_string_len = strcspn(version_string, "" "");
466- }
467- VersionString = MR_GC_malloc_atomic(version_string_len + 1);
468- memcpy(VersionString, version_string, version_string_len);
469- ((char*)VersionString)[version_string_len] = '\\0';
470- IOo = IOi;
471- ").
472+shader_model_version_string(Ctx, Str, !IO) :-
473+ saffron.make_current(Ctx, !IO),
474+ version_string(glsl, Str, !IO).
472475
473476 %-----------------------------------------------------------------------------%
474477
475478 shader_model_version(Ctx, saffron.parse_sem_ver(Version), !IO) :-
476- saffron.make_current(Ctx, !IO),
477479 shader_model_version_string(Ctx, Version, !IO).
478480