@recedent, post #1
@recedent, post #97
@XoR, post #98
@recedent, post #99
@eastone, post #106
@recedent, post #105
Cześć wszystkim!
Chciałem mieć aktualizację TinyGL już kilka tygodni temu, ale niestety tak się nie stało. Kiedy napisałem mój poprzedni post, pracowałem nad obsługą obiektów framebuffera (projekt #2), ale potem odwróciłem swoją uwagę od tego, rozpoczynając pracę nad obsługą programu OpenGL ARB (projekt #4), który jest teraz bardzo bliski ukończenia. W trakcie pracy nad tym projektem skończyłem również pracę nad innymi rzeczami, które nie są technicznie objęte bounty, ale które są nadal bardzo przydatne by umożliwić uruchamianie bardziej nowoczesnych aplikacji OpenGL.
Jako szybki przegląd, oto jak daleko jestem w projektach, które są częścią bounty:
Projekt 1 - 10% - Implementacja potoku stałych funkcji OpenGL jako shaderów
Projekt 2 - 50% - Obiekty bufora ramki
Projekt 3 - 10% - Shadery
Projekt 4 - 80% - programy ARB
Projekt 5 - 5% - Sterownik R600
Miałem nadzieję, że w ten weekend uda mi się wypuścić aktualizację z obsługą programów OpenGL ARB, ale obecnie nie wydaje się prawdopodobne, że będę miał wystarczająco dużo czasu, aby doprowadzić ją do stanu umożliwiającego wydanie na czas. Mam więc mam nadzieję, że nastąpi to niedługo po weekendzie.
Napisałem także dwa małe programy przykładowe, aby pokazać obsługę programu OpenGL ARB, do których dołączę kod źródłowy w aktualizacji SDK, którą planuję wydać razem z aktualizacją TinyGL. Jeden z tych programów zawiera (bardzo ładną, jeśli mogę tak powiedzieć) grafikę wykonaną przez ASiegela, więc bardzo mu za to dziękuję!
Jeśli chodzi o obiekty framebuffera, to stan jest taki, że strona TinyGL jest mniej więcej zrobiona, minus poprawianie wszelkich problemów, które mogą się pojawić po przetestowaniu tego poprawnie. To czego brakuje to wsparcie po stronie sterownika, które jest wymagane do działania.
Próbowałem także stworzyć bardziej szczegółowy changelog dla nadchodzącej publicznej wersji beta, który niestety nie jest kompletny, ale powinien zawierać najważniejsze zmiany. Ten changelog prawdopodobnie trochę się rozrośnie przed planowanym wydaniem w przyszłym tygodniu, ale oto jego aktualna wersja:
tinygl.library: - Wersja biblioteki to teraz 53.0. - Wyczyszczono rozszerzenia OpenGL (advertised - ogłaszane?) przez TinyGL: o GL_EXT_texture_compression_s3tc było (advertised) z niewłaściwą nazwą, EXT_texture_compression_s3tc o Następujące nieistniejące rozszerzenia nie są już (advertised): * GL_ARB_color_table * GL_ARB_compiled_vertex_array * GL_ARB_draw_range_elements * GL_EXT_color_table o Następujące rozszerzenia istnieją, ale nie są obsługiwane, i dlatego nie są już (advertised): * GL_EXT_draw_range_elements o Nowe rozszerzenia niezależne od sterowników (lub obsługiwane przez wszystkie obecne ogłoszone rozszerzenia: * GL_ARB_imaging * GL_ARB_texture_border_clamp * GL_ARB_texture_env_dot3 * GL_ARB_texture_mirrored_repeat * GL_ARB_texture_non_power_of_two * GL_ARB_transpose_matrix * GL_ARB_window_pos * GL_EXT_abgr * GL_EXT_blend_color * GL_EXT_blend_equation_separate * GL_EXT_blend_func_separate * GL_EXT_blend_minmax * GL_EXT_blend_subtract * GL_EXT_multi_draw_array * GL_EXT_texture_env_dot3 * GL_SGI_color_table * Ogłaszane nowe rozszerzenia zależne od sterowników. Dostępność zależy od używanego sterownika: * GL_ARB_fragment_programu. * GL_ARB_texture_cube_map * GL_ARB_vertex_program * GL_EXT_texture_cube_map - Każda funkcja OpenGL 2.1 istnieje teraz w bazie tinygl.library base. Zauważ, że nie oznacza to, że TinyGL obsługuje wszystkie funkcjonalności OpenGL 2.1, a jedynie, że funkcje te istnieją. - Dodano wsparcie dla cube mapping. (rozszerzenia: GL_ARB_texture_cube_map, GL_EXT_texture_cube_map) - Dodano wsparcie dla programów OpenGL ARB. (rozszerzenia: GL_ARB_fragment_program, GL_ARB_vertex_program) - Wiele funkcji OpenGL, które wcześniej miały tylko niektóre warianty inaczej obsługiwanych funkcji, teraz obsługuje wszystkie warianty. Są to funkcje, których nazwy zazwyczaj kończą się pojedynczą cyfrą (1, 2, 3 lub 4), po której następuje 1 lub dwa znaki oznaczające typ argumentu (b, d, f, i, s, ub, ui, us) oraz następnie opcjonalnie v, na przykład glColor3ub(). Funkcje te to: o glColor#?() o glEvalCoord#?() o glMultiTexCoord#?() o glNormal#?() o glRasterPos#?() o glTexCoord#?() o glVertex#?() o glWindowPos#?() - Zaktualizowano glGetDoublev, glGetFloatv i glGetIntegerv, aby naprawić błędy w wielu już obsługiwanych znacznikach i dodało wiele wcześniej nieobsługiwanych znaczników. - Dodano obsługę następujących funkcji pobierających stan: o glGetBooleanv() o glGetLightiv() o glGetMaterialiv() o glGetTexGendv() o glGetTexGenfv() o glGetTexGeniv() o glGetTexLevelParameterfv() - Dodano wsparcie dla następujących funkcji ustawiających stan: o glFogiv() o glLightiv() o glLightModeliv() o glMaterialiv() o glPointParameterf() o glPointParametrfv() o glPointParameteri() o glPointParameteriv() o glTexGeniv() o glTexGendv() - Dodano wsparcie dla następujących znaczników glGetLight#?(): o GL_CONSTANT_ATTENUATION o GL_LINEAR_ATTENUATION o GL_QUADRATIC_ATTENUATION o GL_SPECULAR o GL_SPOT_CUTOFF o GL_SPOT_DIRECTION o GL_SPOT_EXPONENT - Dodano obsługę funkcji glMultiDrawArrays() oraz glMultiDrawElements(). - Dodano wsparcie dla funkcji glFinish(). - GlGetError() jest teraz zaimplementowana i będzie - dla niektórych funkcji zwracać kody błędów zgodne z normami. - Dodano glRectsv(). - Poprawiono niektóre z domyślnych stanów w świeżo utworzonych kontekstach TinyGL aby odpowiadały temu, co jest wymagane przez OpenGL: o Kolor wtórny o Kolor rastra o Wtórny kolor rastra o Współrzędne tekstury dla jednostek tekstury > 0 - glGetTexLevelParameter#?() obsługuje teraz zapytania do celu GL_TEXTURE_1D. R200: - Dodano obsługę cube maps. R200, R300, R400 i R500: - Poprawiono obsługę kombinatorów tekstur, aby były zgodne ze standardami: o Dodano/naprawiono wsparcie dla funkcji łączenia tekstur GL_ADD, GL_ADD_SIGNED, GL_DOT3_RGB, GL_DOT3_RGBA, GL_INTERPOLATE i GL_SUBTRACT. o Dodano obsługę skalowania wyjścia texture combiner. o Dowolna i każda kombinacja GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_ALPHA i GL_ONE_MINUS_SRC_ALPHA i GL_ONE_MINUS_SRC_ALPHA. R300/R400: - Dodano obsługę programów OpenGL ARB. R500: - Naprawiono błąd, który powodował nieprawidłowe renderowanie, jeśli aplikacja miała luki w swoich włączonych jednostkach tekstur, na przykład jeśli włączone były tylko jednostki tekstur 0 i 2. Pakiet testów OpenGL: - Dodano testy texture combiner do mojego zestawu testów OpenGL. Wszystkie sterowniki i kombinacje sprzętowe przechodzą teraz wszystkie testy. SDK: - Proszę zwrócić uwagę, że każde oprogramowanie skompilowane za pomocą zaktualizowanego SDK będzie wymagało tinygl.library w wersji 53.0 lub wyższej, a więc MorphOS 3.18 lub MorphOS 3.17 + ta oddzielna aktualizacja TinyGL. Jeśli ręcznie otworzysz tinygl.library, musisz zaktualizować swój kod, aby zażądać wersji 53! - Automatyczna funkcja libopen TinyGL wymaga teraz co najmniej wersji 53 tinygl.library. - Biblioteka linków TinyGL jest teraz dostępna zarówno w wersji zwykłej, jak i podstawowej. - Funkcja pozwalająca uzyskać wskaźniki do funkcji OpenGL w czasie pracy, tglGetProcAddress(), została dodana do biblioteki linków. Funkcja ta obsługuje każdą pojedynczą funkcję OpenGL, która jest obecna w TinyGL. - Dodatki zostały uaktualnione do pełnego wsparcia OpenGL 2.1, plus następujące rozszerzenia: o GL_ARB_color_buffer_float o GL_ARB_depth_texture o GL_ARB_draw_buffers o GL_ARB_fragment_program o GL_ARB_fragment_program_shadow o GL_ARB_fragment_shader o GL_ARB_bufor_obiekt o GL_ARB_half_float_pixel o GL_ARB_obrazowanie o GL_ARB_matrix_palette o GL_ARB_multisample o GL_ARB_multitexture o GL_ARB_occlusion_query o GL_ARB_pixel_buffer_object o GL_ARB_point_parameters o GL_ARB_point_sprite o GL_ARB_shader_object o GL_ARB_shading_language_100 o GL_ARB_shadow o GL_ARB_shadow_ambient o GL_ARB_texture_border_clamp o GL_ARB_texture_compression o GL_ARB_texture_cube_map o GL_ARB_texture_env_add o GL_ARB_texture_env_combine o GL_ARB_texture_env_crossbar o GL_ARB_texture_env_dot3 o GL_ARB_texture_float o GL_ARB_texture_mirrored_repeat o GL_ARB_texture_non_power_of_two o GL_ARB_texture_rectangle o GL_ARB_transpose_matrix o GL_ARB_vertex_blend o GL_ARB_vertex_buffer_object o GL_ARB_vertex_program o GL_ARB_vertex_shader o GL_ARB_window_pos o GL_ATI_separate_stencil o GL_EXT_abgr o GL_EXT_bgra o GL_EXT_blend_color o GL_EXT_blend_equation_separate o GL_EXT_blend_func_separate o GL_EXT_blend_logic_op o GL_EXT_blend_minmax o GL_EXT_blend_subtract o GL_EXT_color_subtable o GL_EXT_color_table o GL_EXT_compiled_vertex_array o GL_EXT_convolution o GL_EXT_draw_range_elements o GL_EXT_fog_coord o GL_EXT_histogram o GL_EXT_multi_draw_array o GL_EXT_packed_pixels o GL_EXT_paletted_texture o GL_EXT_point_parameters o GL_EXT_rescale_normal o GL_EXT_secondary_color o GL_EXT_separate_specular_color o GL_EXT_shadow_funcs o GL_EXT_shared_texture_palette o GL_EXT_stencil_two_side o GL_EXT_stencil_wrap o GL_EXT_texture3D o GL_EXT_texture_compression_s3tc o GL_EXT_texture_cube_map o GL_EXT_texture_env_add o GL_EXT_texture_env_combine o GL_EXT_texture_env_dot3 o GL_EXT_texture_filter_anisotropic o GL_EXT_texture_lod o GL_EXT_texture_lod_bias o GL_EXT_texture_sRGB o GL_HP_convolution_border_modes o GL_NV_blend_square o GL_NV_texgen_reflection o GL_S3_s3tc o GL_SGIS_generate_mipmap o GL_SGIS_multitexture o GL_SGIS_texture_edge_clamp o GL_SGIS_texture_lod o GL_SGI_color_matrix o GL_SGI_color_table o GL_SUN_multi_draw_arrays
Zakładam, że masz na myśli Radeona 9250, w którym to przypadku mniej więcej odpowiada temu, co jest w Macu Mini, oba wykorzystują układ RV280, który należy do rodziny R200 układów Radeona.
Większość zmian w tej pierwszej aktualizacji będzie miała wpływ na nowe aplikacje i gry przenoszone lub tworzone dla MorphOS-a. Znacznie ulepszone SDK oznacza, że twórcy oprogramowania będą mogli łatwiej przenosić je na MorphOS-a, a ulepszenia OpenGL API i poprawki błędów w sterownikach oznaczają, że to oprogramowanie będzie się uruchamiać i działać poprawnie.
Jeśli chodzi o istniejące oprogramowanie dla MorphOS-a, to uważam, że Doom 3 najbardziej skorzysta na tych zmianach. Jednakże Doom 3 (i SDL) będą wymagały aktualizacji, aby skorzystać z tych zmian.
Nowo wprowadzone programy ARB będą obsługiwane tylko na R300 i R400 w pierwszej aktualizacji. Wsparcie dla R500 i R200 - do tego, co może obsłużyć sprzęt - pojawi się w późniejszej aktualizacji.
Specjalnie dla R200 zaimplementowano wsparcie dla cube maps, co pozwoli na poprawne działanie programów wykorzystujących cube maps. Prawdopodobnie nie będzie to miało bezpośredniego wpływu na wiele istniejących programów, ale ponownie umożliwi to stworzenie większej ilości nowych programów.
@recedent, post #108
@waldiamiga, post #111
@recedent, post #1