修订版 | a4033e0be2da01153bd195f00cd2122dfec6f902 (tree) |
---|---|
时间 | 2016-01-08 19:25:10 |
作者 | SUEHIRO <supersuehiro@user...> |
Commiter | SUEHIRO |
OpenGL 2.0 程度で動くようにした
@@ -44,7 +44,7 @@ const bool SaveMemory = true; | ||
44 | 44 | |
45 | 45 | |
46 | 46 | const bool IgnoreMostErrors = true; |
47 | -const bool OpenGL = false; | |
47 | +const bool OpenGL = true; | |
48 | 48 | |
49 | 49 | |
50 | 50 |
@@ -21,61 +21,61 @@ class OggVorbis | ||
21 | 21 | { |
22 | 22 | OggVorbis_File _vf; |
23 | 23 | FILE* _fh; |
24 | - void fileClose() | |
24 | + MEMBER void fileClose() | |
25 | 25 | { |
26 | - if(_fh) fclose(_fh); | |
26 | + if (_fh) fclose(_fh); | |
27 | 27 | _fh = nullptr; |
28 | 28 | } |
29 | 29 | public: |
30 | - OggVorbis() | |
30 | + MEMBER OggVorbis() | |
31 | 31 | { |
32 | 32 | memset(&_vf, 0, sizeof(_vf)); |
33 | 33 | _fh = nullptr; |
34 | 34 | } |
35 | - ~OggVorbis() | |
35 | + MEMBER ~OggVorbis() | |
36 | 36 | { |
37 | 37 | clear(); |
38 | 38 | } |
39 | - bool open(std::wstring file) | |
39 | + MEMBER bool open(std::WSTR file) | |
40 | 40 | { |
41 | - fileClose(); | |
42 | - _wfopen_s(&_fh, file.c_str(), L"rb"); | |
43 | - if(!_fh) return false; | |
44 | - if(ov_open(_fh, &_vf, nullptr, 0) < 0){ | |
41 | + clear(); | |
42 | + _wfopen_s(&_fh, file.c_str(), L("rb")); | |
43 | + if (!_fh) return false; | |
44 | + if (ov_open(_fh, &_vf, nullptr, 0) < 0) { | |
45 | 45 | fileClose(); |
46 | 46 | return false; |
47 | 47 | } |
48 | 48 | return true; |
49 | 49 | } |
50 | - void clear() | |
50 | + MEMBER void clear() | |
51 | 51 | { |
52 | - if(!_fh) return; | |
52 | + if (!_fh) return; | |
53 | 53 | ov_clear(&_vf); |
54 | - fileClose(); | |
54 | + _fh = nullptr; | |
55 | 55 | } |
56 | - int64_t pcmTotal() | |
56 | + MEMBER int64_t pcmTotal() | |
57 | 57 | { |
58 | 58 | return ov_pcm_total(&_vf, -1); |
59 | 59 | } |
60 | - int32_t channels() | |
60 | + MEMBER int32_t channels() | |
61 | 61 | { |
62 | 62 | auto nc = ov_info(&_vf, -1); |
63 | 63 | return nc ? nc->channels : -1; |
64 | 64 | } |
65 | - int32_t rate() | |
65 | + MEMBER int32_t rate() | |
66 | 66 | { |
67 | 67 | auto nc = ov_info(&_vf, -1); |
68 | 68 | return nc ? nc->rate : -1; |
69 | 69 | } |
70 | - intptr_t read(int16_t* buffer, intptr_t length) | |
70 | + MEMBER intptr_t read(int16_t* buffer, intptr_t length) | |
71 | 71 | { |
72 | 72 | int current_section; |
73 | 73 | auto rlen = |
74 | - ov_read(&_vf, (char*)buffer, length*2, 0, 2, 1, ¤t_section); | |
75 | - if(rlen > 0) rlen /= 2; | |
74 | + ov_read(&_vf, (char*)buffer, length * 2, 0, 2, 1, ¤t_section); | |
75 | + if (rlen > 0) rlen /= 2; | |
76 | 76 | return rlen; |
77 | 77 | } |
78 | - int32_t seek(double time) | |
78 | + MEMBER int32_t seek(double time) | |
79 | 79 | { |
80 | 80 | return ov_time_seek(&_vf, time); |
81 | 81 | } |
@@ -394,7 +394,13 @@ Joystick g_js; | ||
394 | 394 | GLhandleARB g_mugenshader = 0; |
395 | 395 | GLhandleARB g_mugenshaderFc = 0; |
396 | 396 | GLhandleARB g_mugenshaderFcS = 0; |
397 | -GLuint g_glpalette = 0; | |
397 | +static GLint g_uniformPal = 0; | |
398 | +static GLint g_uniformMsk = 0; | |
399 | +static GLint g_uniformNeg = 0; | |
400 | +static GLint g_uniformGray = 0; | |
401 | +static GLint g_uniformAdd = 0; | |
402 | +static GLint g_uniformMul = 0; | |
403 | +static GLint g_uniformColor = 0; | |
398 | 404 | |
399 | 405 | |
400 | 406 | void sndjoyinit() |
@@ -2781,51 +2787,48 @@ TUserFunc(bool, InitMugenGl) | ||
2781 | 2787 | "gl_Position = ftransform();" |
2782 | 2788 | "}"; |
2783 | 2789 | const GLchar* fragShader = |
2784 | - "#version 140\n" | |
2790 | + "uniform float a;" | |
2785 | 2791 | "uniform sampler2D tex;" |
2786 | - "uniform samplerBuffer pal;" | |
2792 | + "uniform sampler1D pal;" | |
2787 | 2793 | "uniform int msk;" |
2788 | - "uniform float alp;" | |
2789 | 2794 | "void main(void){" |
2790 | - "int i = int(round(255.0*texture(tex, gl_TexCoord[0].st).r));" | |
2791 | - "vec4 c;" | |
2792 | - "gl_FragColor =" | |
2793 | - "i == msk ? vec4(0.0)" | |
2794 | - ": (c = texelFetchBuffer(pal, i), vec4(c.b, c.g, c.r, alp));" | |
2795 | + "float r = texture2D(tex, gl_TexCoord[0].st).r;" | |
2796 | + "vec4 c;" | |
2797 | + "gl_FragColor =" | |
2798 | + "int(255.0*r) == msk ? vec4(0.0)" | |
2799 | + ": (c = texture1D(pal, r*0.9961), vec4(c.b, c.g, c.r, a));" | |
2795 | 2800 | "}"; |
2796 | 2801 | const GLchar* fragShaderFc = |
2797 | - "#version 140\n" | |
2802 | + "uniform float a;" | |
2798 | 2803 | "uniform sampler2D tex;" |
2799 | 2804 | "uniform bool neg;" |
2800 | 2805 | "uniform float gray;" |
2801 | 2806 | "uniform vec3 add;" |
2802 | 2807 | "uniform vec3 mul;" |
2803 | - "uniform float alp;" | |
2804 | 2808 | "void main(void){" |
2805 | - "vec4 c = texture(tex, gl_TexCoord[0].st);" | |
2806 | - "if(neg) c.rgb = vec3(1.0) - c.rgb;" | |
2807 | - "float gcol = (c.r + c.g + c.b) / 3.0;" | |
2808 | - "c.r += (gcol - c.r) * gray + add.r;" | |
2809 | - "c.g += (gcol - c.g) * gray + add.g;" | |
2810 | - "c.b += (gcol - c.b) * gray + add.b;" | |
2811 | - "c.rgb *= mul;" | |
2812 | - "c.a *= alp;" | |
2813 | - "gl_FragColor = c;" | |
2809 | + "vec4 c = texture2D(tex, gl_TexCoord[0].st);" | |
2810 | + "if(neg) c.rgb = vec3(1.0) - c.rgb;" | |
2811 | + "float gcol = (c.r + c.g + c.b) / 3.0;" | |
2812 | + "c.r += (gcol - c.r) * gray + add.r;" | |
2813 | + "c.g += (gcol - c.g) * gray + add.g;" | |
2814 | + "c.b += (gcol - c.b) * gray + add.b;" | |
2815 | + "c.rgb *= mul;" | |
2816 | + "c.a *= a;" | |
2817 | + "gl_FragColor = c;" | |
2814 | 2818 | "}"; |
2815 | 2819 | const GLchar* fragShaderFcS = |
2816 | - "#version 140\n" | |
2820 | + "uniform float a;" | |
2817 | 2821 | "uniform sampler2D tex;" |
2818 | 2822 | "uniform vec3 color;" |
2819 | - "uniform float alp;" | |
2820 | 2823 | "void main(void){" |
2821 | - "vec4 c = texture(tex, gl_TexCoord[0].st);" | |
2822 | - "c.rgb = color * c.a;" | |
2823 | - "c.a *= alp;" | |
2824 | - "gl_FragColor = c;" | |
2824 | + "vec4 c = texture2D(tex, gl_TexCoord[0].st);" | |
2825 | + "c.rgb = color * c.a;" | |
2826 | + "c.a *= a;" | |
2827 | + "gl_FragColor = c;" | |
2825 | 2828 | "}"; |
2826 | 2829 | if( |
2827 | - !GLEW_VERSION_3_1 | |
2828 | - || !GLEW_ARB_vertex_shader || !GLEW_ARB_fragment_shader | |
2830 | + !GLEW_ARB_shader_objects || !GLEW_ARB_vertex_shader | |
2831 | + || !GLEW_ARB_fragment_shader | |
2829 | 2832 | || g_mugenshader != 0 || g_mugenshaderFc != 0 || g_mugenshaderFcS != 0) |
2830 | 2833 | { |
2831 | 2834 | return false; |
@@ -2841,61 +2844,67 @@ TUserFunc(bool, InitMugenGl) | ||
2841 | 2844 | int linked = 0; |
2842 | 2845 | GLint length; |
2843 | 2846 | length = strlen((char*)vertShader); |
2844 | - glShaderSource( | |
2847 | + glShaderSourceARB( | |
2845 | 2848 | hVertShaderObject, 1, (const GLchar**)&vertShader, &length); |
2846 | - glCompileShader(hVertShaderObject); | |
2849 | + glCompileShaderARB(hVertShaderObject); | |
2847 | 2850 | glGetObjectParameterivARB( |
2848 | 2851 | hVertShaderObject, GL_OBJECT_COMPILE_STATUS_ARB, &vert_compiled); |
2849 | 2852 | if(vert_compiled == 0) goto fail; |
2850 | - glGenBuffers(1, &g_glpalette); | |
2851 | 2853 | |
2852 | 2854 | length = strlen((char*)fragShader); |
2853 | - glShaderSource( | |
2855 | + glShaderSourceARB( | |
2854 | 2856 | hFragShaderObject, 1, (const GLchar**)&fragShader, &length); |
2855 | - glCompileShader(hFragShaderObject); | |
2857 | + glCompileShaderARB(hFragShaderObject); | |
2856 | 2858 | glGetObjectParameterivARB( |
2857 | 2859 | hFragShaderObject, GL_OBJECT_COMPILE_STATUS_ARB, &frag_compiled); |
2858 | 2860 | if(frag_compiled == 0) goto fail; |
2859 | 2861 | glAttachObjectARB(g_mugenshader, hVertShaderObject); |
2860 | 2862 | glAttachObjectARB(g_mugenshader, hFragShaderObject); |
2861 | - glLinkProgram(g_mugenshader); | |
2863 | + glLinkProgramARB(g_mugenshader); | |
2862 | 2864 | glGetObjectParameterivARB( |
2863 | 2865 | g_mugenshader, GL_OBJECT_LINK_STATUS_ARB, &linked); |
2864 | 2866 | if(linked == 0) goto fail; |
2867 | + g_uniformPal = glGetUniformLocationARB(g_mugenshader, "pal"); | |
2868 | + g_uniformMsk = glGetUniformLocationARB(g_mugenshader, "msk"); | |
2865 | 2869 | |
2866 | 2870 | glDeleteObjectARB(hFragShaderObject); |
2867 | 2871 | hFragShaderObject = |
2868 | 2872 | glCreateShaderObjectARB(GL_FRAGMENT_SHADER); |
2869 | 2873 | length = strlen((char*)fragShaderFc); |
2870 | - glShaderSource( | |
2874 | + glShaderSourceARB( | |
2871 | 2875 | hFragShaderObject, 1, (const GLchar**)&fragShaderFc, &length); |
2872 | - glCompileShader(hFragShaderObject); | |
2876 | + glCompileShaderARB(hFragShaderObject); | |
2873 | 2877 | glGetObjectParameterivARB( |
2874 | 2878 | hFragShaderObject, GL_OBJECT_COMPILE_STATUS_ARB, &frag_compiled); |
2875 | 2879 | if(frag_compiled == 0) goto fail; |
2876 | 2880 | glAttachObjectARB(g_mugenshaderFc, hVertShaderObject); |
2877 | 2881 | glAttachObjectARB(g_mugenshaderFc, hFragShaderObject); |
2878 | - glLinkProgram(g_mugenshaderFc); | |
2882 | + glLinkProgramARB(g_mugenshaderFc); | |
2879 | 2883 | glGetObjectParameterivARB( |
2880 | 2884 | g_mugenshaderFc, GL_OBJECT_LINK_STATUS_ARB, &linked); |
2881 | 2885 | if(linked == 0) goto fail; |
2886 | + g_uniformNeg = glGetUniformLocationARB(g_mugenshaderFc, "neg"); | |
2887 | + g_uniformGray = glGetUniformLocationARB(g_mugenshaderFc, "gray"); | |
2888 | + g_uniformAdd = glGetUniformLocationARB(g_mugenshaderFc, "add"); | |
2889 | + g_uniformMul = glGetUniformLocationARB(g_mugenshaderFc, "mul"); | |
2882 | 2890 | |
2883 | 2891 | glDeleteObjectARB(hFragShaderObject); |
2884 | 2892 | hFragShaderObject = |
2885 | 2893 | glCreateShaderObjectARB(GL_FRAGMENT_SHADER); |
2886 | 2894 | length = strlen((char*)fragShaderFcS); |
2887 | - glShaderSource( | |
2895 | + glShaderSourceARB( | |
2888 | 2896 | hFragShaderObject, 1, (const GLchar**)&fragShaderFcS, &length); |
2889 | - glCompileShader(hFragShaderObject); | |
2897 | + glCompileShaderARB(hFragShaderObject); | |
2890 | 2898 | glGetObjectParameterivARB( |
2891 | 2899 | hFragShaderObject, GL_OBJECT_COMPILE_STATUS_ARB, &frag_compiled); |
2892 | 2900 | if(frag_compiled == 0) goto fail; |
2893 | 2901 | glAttachObjectARB(g_mugenshaderFcS, hVertShaderObject); |
2894 | 2902 | glAttachObjectARB(g_mugenshaderFcS, hFragShaderObject); |
2895 | - glLinkProgram(g_mugenshaderFcS); | |
2903 | + glLinkProgramARB(g_mugenshaderFcS); | |
2896 | 2904 | glGetObjectParameterivARB( |
2897 | 2905 | g_mugenshaderFcS, GL_OBJECT_LINK_STATUS_ARB, &linked); |
2898 | 2906 | if(linked == 0) goto fail; |
2907 | + g_uniformColor = glGetUniformLocationARB(g_mugenshaderFcS, "color"); | |
2899 | 2908 | |
2900 | 2909 | glDeleteObjectARB(hVertShaderObject); |
2901 | 2910 | glDeleteObjectARB(hFragShaderObject); |
@@ -3103,28 +3112,28 @@ void renderMugenGl( | ||
3103 | 3112 | glPushMatrix(); |
3104 | 3113 | glTranslated(0, g_h, 0); |
3105 | 3114 | if(alpha == -1){ |
3106 | - glUniform1f(glGetUniformLocation(shader, "alp"), 1.0); | |
3115 | + glUniform1fARB(glGetUniformLocation(shader, "a"), 1.0); | |
3107 | 3116 | glBlendFunc(GL_SRC_ALPHA, GL_ONE); |
3108 | 3117 | drawTile( |
3109 | 3118 | r.w, r.h, x, y, tl, xtopscl, xbotscl, yscl, vscl, rasterxadd, |
3110 | 3119 | angle, rcx, rcy, 1, 1, 1, 1); |
3111 | 3120 | }else if(alpha == -2){ |
3112 | - glUniform1f(glGetUniformLocation(shader, "alp"), 1.0); | |
3121 | + glUniform1fARB(glGetUniformLocation(shader, "a"), 1.0); | |
3113 | 3122 | glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR); |
3114 | 3123 | drawTile( |
3115 | 3124 | r.w, r.h, x, y, tl, xtopscl, xbotscl, yscl, vscl, rasterxadd, |
3116 | 3125 | angle, rcx, rcy, 1, 1, 1, 1); |
3117 | 3126 | }else if(alpha <= 0){ |
3118 | 3127 | }else if(alpha < 255){ |
3119 | - glUniform1f( | |
3120 | - glGetUniformLocation(shader, "alp"), | |
3128 | + glUniform1fARB( | |
3129 | + glGetUniformLocation(shader, "a"), | |
3121 | 3130 | (GLfloat)alpha / 255.0f); |
3122 | 3131 | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
3123 | 3132 | drawTile( |
3124 | 3133 | r.w, r.h, x, y, tl, xtopscl, xbotscl, yscl, vscl, rasterxadd, |
3125 | 3134 | angle, rcx, rcy, 1, 1, 1, (GLfloat)alpha / 255.0f); |
3126 | 3135 | }else if(alpha < 512){ |
3127 | - glUniform1f(glGetUniformLocation(shader, "alp"), 1.0); | |
3136 | + glUniform1fARB(glGetUniformLocation(shader, "a"), 1.0); | |
3128 | 3137 | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); |
3129 | 3138 | drawTile( |
3130 | 3139 | r.w, r.h, x, y, tl, xtopscl, xbotscl, yscl, vscl, rasterxadd, |
@@ -3133,8 +3142,8 @@ void renderMugenGl( | ||
3133 | 3142 | int src = alpha & 0xff; |
3134 | 3143 | int dst = (alpha & 0x3fc00) >> 10; |
3135 | 3144 | if(dst < 255){ |
3136 | - glUniform1f( | |
3137 | - glGetUniformLocation(shader, "alp"), | |
3145 | + glUniform1fARB( | |
3146 | + glGetUniformLocation(shader, "a"), | |
3138 | 3147 | 1.0f - (GLfloat)dst / 255.0f); |
3139 | 3148 | glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA); |
3140 | 3149 | drawTile( |
@@ -3142,8 +3151,8 @@ void renderMugenGl( | ||
3142 | 3151 | angle, rcx, rcy, 1, 1, 1, 1.0f - (GLfloat)dst / 255.0f); |
3143 | 3152 | } |
3144 | 3153 | if(src > 0){ |
3145 | - glUniform1f( | |
3146 | - glGetUniformLocation(shader, "alp"), (GLfloat)src / 255.0f); | |
3154 | + glUniform1fARB( | |
3155 | + glGetUniformLocation(shader, "a"), (GLfloat)src / 255.0f); | |
3147 | 3156 | glBlendFunc(GL_SRC_ALPHA, GL_ONE); |
3148 | 3157 | drawTile( |
3149 | 3158 | r.w, r.h, x, y, tl, xtopscl, xbotscl, yscl, vscl, rasterxadd, |
@@ -3183,25 +3192,36 @@ TUserFunc( | ||
3183 | 3192 | rcy = -rcy; |
3184 | 3193 | if(yscl < 0) y = -y; |
3185 | 3194 | y += rcy; |
3186 | - glBindBuffer(GL_TEXTURE_BUFFER, g_glpalette); | |
3187 | - glBufferData(GL_TEXTURE_BUFFER, 4*256, ppal, GL_STATIC_DRAW); | |
3188 | - glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA8, g_glpalette); | |
3189 | - glUniform1i(glGetUniformLocation(g_mugenshader, "pal"), 1); | |
3190 | - glUseProgram(g_mugenshader); | |
3191 | - glUniform1i(glGetUniformLocation(g_mugenshader, "msk"), mask); | |
3195 | + glUseProgramObjectARB(g_mugenshader); | |
3196 | + glUniform1iARB(g_uniformPal, 1); | |
3197 | + glUniform1iARB(g_uniformMsk, mask); | |
3198 | + glEnable(GL_TEXTURE_1D); | |
3192 | 3199 | glEnable(GL_TEXTURE_2D); |
3193 | 3200 | glBindTexture(GL_TEXTURE_2D, texid); |
3194 | 3201 | glDisable(GL_DEPTH_TEST); |
3195 | 3202 | glEnable(GL_SCISSOR_TEST); |
3196 | 3203 | glScissor(dstr->x, g_h - (dstr->y+dstr->h), dstr->w, dstr->h); |
3197 | 3204 | // |
3205 | + glActiveTexture(GL_TEXTURE1); | |
3206 | + uint32_t paltex; | |
3207 | + glGenTextures(1, &paltex); | |
3208 | + glBindTexture(GL_TEXTURE_1D, paltex); | |
3209 | + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); | |
3210 | + glTexImage1D( | |
3211 | + GL_TEXTURE_1D, 0, GL_RGBA, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, ppal); | |
3212 | + glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | |
3213 | + glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); | |
3214 | + glActiveTexture(GL_TEXTURE0); | |
3215 | + glBindTexture(GL_TEXTURE_2D, texid); | |
3198 | 3216 | renderMugenGl( |
3199 | 3217 | rcy, rcx, alpha, angle, rasterxadd, vscl, yscl, xbotscl, xtopscl, |
3200 | 3218 | tl, y, x, r, g_mugenshader); |
3219 | + glDeleteTextures(1, &paltex); | |
3201 | 3220 | // |
3202 | 3221 | glDisable(GL_SCISSOR_TEST); |
3203 | 3222 | glDisable(GL_TEXTURE_2D); |
3204 | - glUseProgram(0); | |
3223 | + glDisable(GL_TEXTURE_1D); | |
3224 | + glUseProgramObjectARB(0); | |
3205 | 3225 | return true; |
3206 | 3226 | } |
3207 | 3227 |
@@ -3235,20 +3255,16 @@ TUserFunc( | ||
3235 | 3255 | rcy = -rcy; |
3236 | 3256 | if(yscl < 0) y = -y; |
3237 | 3257 | y += rcy; |
3238 | - glUseProgram(g_mugenshaderFc); | |
3239 | - glUniform1i(glGetUniformLocation(g_mugenshaderFc, "neg"), neg); | |
3240 | - glUniform1f(glGetUniformLocation(g_mugenshaderFc, "gray"), 1 - color); | |
3241 | - glUniform3f( | |
3242 | - glGetUniformLocation(g_mugenshaderFc, "add"), addr, addg, addb); | |
3243 | - glUniform3f( | |
3244 | - glGetUniformLocation(g_mugenshaderFc, "mul"), mulr, mulg, mulb); | |
3258 | + glUniform1iARB(g_uniformNeg, neg); | |
3259 | + glUniform1fARB(g_uniformGray, 1 - color); | |
3260 | + glUniform3fARB(g_uniformAdd, addr, addg, addb); | |
3261 | + glUniform3fARB(g_uniformMul, mulr, mulg, mulb); | |
3245 | 3262 | glEnable(GL_TEXTURE_2D); |
3246 | 3263 | glBindTexture(GL_TEXTURE_2D, texid); |
3247 | 3264 | glDisable(GL_DEPTH_TEST); |
3248 | 3265 | glEnable(GL_SCISSOR_TEST); |
3249 | 3266 | glScissor(dstr->x, g_h - (dstr->y+dstr->h), dstr->w, dstr->h); |
3250 | 3267 | // |
3251 | - glMatrixMode(GL_PROJECTION); | |
3252 | 3268 | glPushMatrix(); |
3253 | 3269 | glOrtho(0, g_w, 0, g_h, -1, 1); |
3254 | 3270 | glPopMatrix(); |
@@ -3258,7 +3274,7 @@ TUserFunc( | ||
3258 | 3274 | // |
3259 | 3275 | glDisable(GL_SCISSOR_TEST); |
3260 | 3276 | glDisable(GL_TEXTURE_2D); |
3261 | - glUseProgram(0); | |
3277 | + glUseProgramObjectARB(0); | |
3262 | 3278 | return true; |
3263 | 3279 | } |
3264 | 3280 |
@@ -3291,11 +3307,10 @@ TUserFunc( | ||
3291 | 3307 | rcy = -rcy; |
3292 | 3308 | if(yscl < 0) y = -y; |
3293 | 3309 | y += rcy; |
3294 | - glUseProgram(g_mugenshaderFcS); | |
3295 | - glUniform3f( | |
3296 | - glGetUniformLocation(g_mugenshaderFcS, "color"), | |
3297 | - (float)(color>>16&0xff)/255, (float)(color>>8&0xff)/255, | |
3298 | - (float)(color&0xff)/255); | |
3310 | + glUseProgramObjectARB(g_mugenshaderFcS); | |
3311 | + glUniform3fARB( | |
3312 | + g_uniformColor, (float)(color >> 16 & 0xff) / 255, (float)(color >> 8 & 0xff) / 255, | |
3313 | + (float)(color & 0xff) / 255); | |
3299 | 3314 | glEnable(GL_TEXTURE_2D); |
3300 | 3315 | glBindTexture(GL_TEXTURE_2D, texid); |
3301 | 3316 | glDisable(GL_DEPTH_TEST); |
@@ -3308,7 +3323,7 @@ TUserFunc( | ||
3308 | 3323 | // |
3309 | 3324 | glDisable(GL_SCISSOR_TEST); |
3310 | 3325 | glDisable(GL_TEXTURE_2D); |
3311 | - glUseProgram(0); | |
3326 | + glUseProgramObjectARB(0); | |
3312 | 3327 | return true; |
3313 | 3328 | } |
3314 | 3329 |
@@ -189,7 +189,7 @@ void main() | ||
189 | 189 | } |
190 | 190 | /?/*.cfg.OpenGL: |
191 | 191 | if(!.sdl.InitMugenGl(::)){ |
192 | - .error!.self?("OpenGL 3.1 の初期設定に失敗"); | |
192 | + .error!.self?("OpenGL の初期設定に失敗"); | |
193 | 193 | ret; |
194 | 194 | } |
195 | 195 | /*?*/ |
@@ -158,7 +158,7 @@ public &Sound | ||
158 | 158 | public bool loop_ = false, lowpriority = false; |
159 | 159 | public float freqmul = 1.0; |
160 | 160 | public float fidx = 0.0; |
161 | - const float frametime = 1.0 / 44100.0; | |
161 | + const float frametime = 1.0 / (float).sdl.SNDFREQ; | |
162 | 162 | public void setVol(int v) |
163 | 163 | { |
164 | 164 | branch{ |
@@ -7829,7 +7829,7 @@ public &StateBuilder | ||
7829 | 7829 | `state.ctrlList[-1].typ = .CtrlTy::Explod; |
7830 | 7830 | cond .s.equ(s, "gamemakeanim"): |
7831 | 7831 | `state.ctrlList[-1].typ = .CtrlTy::GameMakeAnim; |
7832 | - cond .s.equ(s, "modifyexplod"): | |
7832 | + cond .s.equ(s, "modifyexplod"): | |
7833 | 7833 | `state.ctrlList[-1].typ = .CtrlTy::ModifyExplod; |
7834 | 7834 | cond .s.equ(s, "explodbindtime"): |
7835 | 7835 | `state.ctrlList[-1].typ = .CtrlTy::ExplodBindTime; |
@@ -7851,7 +7851,7 @@ public &StateBuilder | ||
7851 | 7851 | `state.ctrlList[-1].typ = .CtrlTy::AngleSet; |
7852 | 7852 | cond .s.equ(s, "palfx"): |
7853 | 7853 | `state.ctrlList[-1].typ = .CtrlTy::PalFX; |
7854 | - cond .s.equ(s, "allpalfx"): | |
7854 | + cond .s.equ(s, "allpalfx"): | |
7855 | 7855 | `state.ctrlList[-1].typ = .CtrlTy::AllPalFX; |
7856 | 7856 | cond .s.equ(s, "bgpalfx"): |
7857 | 7857 | `state.ctrlList[-1].typ = .CtrlTy::BGPalFX; |
@@ -7983,7 +7983,6 @@ public &StateBuilder | ||
7983 | 7983 | ? "" : .com.FileReadError; |
7984 | 7984 | }] > 0) |
7985 | 7985 | { |
7986 | - if(.cfg.IgnoreMostErrors) ret ""; | |
7987 | 7986 | ret def + ":"\r\n + error; |
7988 | 7987 | } |
7989 | 7988 | ^/char fn = st; |