http://decomo.info/wiki/" /> クソゲ〜製作所 - 2007年07月の日記

クソゲ~製作所

新システムに移行中:http://decomo.info/wiki/

« 2007年06月 | ホーム 2007年08月 »

2007年07月14日(土)

 

GLEW.framework

 
http://decomo.info/wiki/blog/2007/2007-07-14に移動しました。

Mac(Xcode)でGLEWを使おうと、随分と前から格闘してただんだけど、どうしても上手くいかず、ついカッとなってフレームワークを作った。

一応、ちゃんと動いてる模様。

動作報告やバグ報告(技術が無いので対処できるかは不明ですが)などなど、お待ちしております。

折角なので、このフレームワークを使うようにしたvisualinfoのログを曝してみる。MacBook Pro 2.4GHz (MA896J/A)での結果なのでありますよ。

OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA GeForce 8600M GT OpenGL Engine
OpenGL version string: 2.0 NVIDIA-1.5.2
OpenGL extensions (GL_): 
    GL_ARB_transpose_matrix, GL_ARB_vertex_program, GL_ARB_vertex_blend,
    GL_ARB_window_pos, GL_ARB_shader_objects, GL_ARB_vertex_shader,
    GL_EXT_multi_draw_arrays, GL_EXT_clip_volume_hint, GL_EXT_rescale_normal,
    GL_EXT_draw_range_elements, GL_EXT_fog_coord, GL_EXT_gpu_program_parameters,
    GL_APPLE_client_storage, GL_APPLE_specular_vector, GL_APPLE_transform_hint,
    GL_APPLE_packed_pixels, GL_APPLE_fence, GL_APPLE_vertex_array_object,
    GL_APPLE_vertex_program_evaluators, GL_APPLE_element_array,
    GL_APPLE_flush_render, GL_APPLE_aux_depth_stencil, GL_NV_texgen_reflection,
    GL_NV_light_max_exponent, GL_IBM_rasterpos_clip, GL_SGIS_generate_mipmap,
    GL_ARB_shading_language_100, GL_ARB_imaging, GL_ARB_point_parameters,
    GL_ARB_texture_env_crossbar, GL_ARB_texture_border_clamp,
    GL_ARB_multitexture, GL_ARB_texture_env_add, GL_ARB_texture_cube_map,
    GL_ARB_texture_env_dot3, GL_ARB_multisample, GL_ARB_texture_env_combine,
    GL_ARB_texture_compression, GL_ARB_texture_mirrored_repeat, GL_ARB_shadow,
    GL_ARB_depth_texture, GL_ARB_fragment_program,
    GL_ARB_fragment_program_shadow, GL_ARB_fragment_shader,
    GL_ARB_occlusion_query, GL_ARB_point_sprite,
    GL_ARB_texture_non_power_of_two, GL_ARB_vertex_buffer_object,
    GL_ARB_pixel_buffer_object, GL_ARB_draw_buffers, GL_ARB_shader_texture_lod,
    GL_EXT_compiled_vertex_array, GL_EXT_framebuffer_object,
    GL_EXT_texture_rectangle, GL_ARB_texture_rectangle, GL_EXT_texture_env_add,
    GL_EXT_blend_color, GL_EXT_blend_minmax, GL_EXT_blend_subtract,
    GL_EXT_texture_lod_bias, GL_EXT_abgr, GL_EXT_bgra, GL_EXT_stencil_wrap,
    GL_EXT_texture_filter_anisotropic, GL_EXT_secondary_color,
    GL_EXT_blend_func_separate, GL_EXT_shadow_funcs, GL_EXT_stencil_two_side,
    GL_EXT_depth_bounds_test, GL_EXT_texture_compression_s3tc,
    GL_EXT_texture_compression_dxt1, GL_EXT_texture_sRGB,
    GL_EXT_blend_equation_separate, GL_EXT_texture_mirror_clamp,
    GL_EXT_packed_depth_stencil, GL_EXT_geometry_shader4,
    GL_EXT_transform_feedback, GL_EXT_gpu_shader4, GL_APPLE_flush_buffer_range,
    GL_APPLE_ycbcr_422, GL_APPLE_vertex_array_range, GL_APPLE_texture_range,
    GL_APPLE_float_pixels, GL_ATI_texture_float, GL_ARB_texture_float,
    GL_ARB_half_float_pixel, GL_APPLE_pixel_buffer, GL_APPLE_object_purgeable,
    GL_NV_point_sprite, GL_NV_register_combiners, GL_NV_register_combiners2,
    GL_NV_blend_square, GL_NV_texture_shader, GL_NV_texture_shader2,
    GL_NV_texture_shader3, GL_NV_fog_distance, GL_NV_depth_clamp,
    GL_NV_multisample_filter_hint, GL_NV_fragment_program_option,
    GL_NV_fragment_program2, GL_NV_vertex_program2_option,
    GL_NV_vertex_program3, GL_ATI_texture_mirror_once,
    GL_ATI_texture_env_combine3, GL_ATI_separate_stencil,
    GL_SGIS_texture_edge_clamp, GL_SGIS_texture_lod.
GLU version string: 1.3 MacOSX
GLU extensions (GLU_): 
    .
Decomo 14:20 comment (1) trackback (0)

2007年07月11日(水)

 

1.[kernel/main.c]_PROTOTYPEマクロに唸る

 
http://decomo.info/wiki/blog/2007/2007-07-11に移行しました。

MINIXのご本尊のmainだと思われる、kernel/main.cから読み進めて行こう。ファイルの冒頭にも「This file contains the main program of MINIX as well as its shutdown code.」と書いてある。

24行目から始まるプロトタイプ宣言。初っぱなからマクロの登場だ。

FORWARD _PROTOTYPE( void announce, (void));

FORWARDはinclude/minix/const.hで#define FORWARD staticと定義されている。これ以外の独自修飾子も、同様にconst.hで宣言されている。

include/minix/const.h:9-12
#define EXTERN        extern	/* used in *.h files */
#define PRIVATE       static	/* PRIVATE x limits the scope of x */
#define PUBLIC					/* PUBLIC is the opposite of PRIVATE */
#define FORWARD       static	/* some compilers require this to be 'static'*/

FORWARDは、関数のスコープをファイルスコープに押さえ込む役割のようだ。

続いて_PROTOTYPEマクロ。

名前からもわかるように、関数プロトタイプ宣言に関するマクロである。これの役割はK&R CとANSI Cのプロトタイプ宣言の違いを吸収するものっぽい。本体はinclude/ansi.hに記述されている。

#ifdef _ANSI

/* Keep everything for ANSI prototypes. */
#define _PROTOTYPE(function, params) function params
#define _ARGS(params) params
(略)

#else

/* Throw away the parameters for K&R prototypes. */
#define _PROTOTYPE(function, params) function()
#define _ARGS(params) ()
(略)

#endif /* _ANSI */

この定義と、先のプロトタイプ宣言を見比べると、K&RとANSIそれぞれの場合で以下のように展開されることがわかる。

ANSIの場合 static void announce (void);
K&R の場合 static void announce();

ANSIの場合は普通のプロトタイプ宣言だが、K&Rにはプロトタイプ宣言なるものは存在しないので、この文は関数の使用宣言をしているらしい(K&Rの資料がないので詳細は不明)。

では実際の関数定義部はどうなっているかというと……announce関数は引数を持たないので、その次のshutdown関数を見てみる。

PRIVATE void shutdown(tp)
timer_t *tp;
{
	...

こっちは完全にK&R準拠の書き方だ。後方互換の為に、ANSI Cでもこの書き方も許されている(無論、推奨はされていないが)ので、プロトタイプ宣言部分だけを切り替えてやれば、K&RなコンパイラでもANSIなコンパイラでもコンパイルできるって仕組みか。すげー!

Decomo 23:17 comment (0) trackback (0)

2007年07月10日(火)

 

0.MINIXのソースを読む

 
http://decomo.info/wiki/blog/2007/2007-07-10に移行しました。

就活の面接で「OSのソースを読むと勉強になるYO!」と言われたのに触発され、読んでみる事にした。タスク管理とか前々から興味はあったしね。

Mac厨でありBSD厨でもある俺としては、FreeBSDとかDarwinのソースを読んでみたい所だけど、こいつらは流石に規模が大き過ぎるので、初学者には厳しいと判断。とりあえず、この手の話には最適なMINIXのソースを読む事にする。

MINIX 3公式サイトからMINIX 3.1.1の基本機能部分だけのソースtarballを落としてきて解凍。適当にXcodeでプロジェクトを作って、ソースファイルを丸ごと追加した。ソースコードを読むための、各種ツールなんかもあるみたいけど、とりあえずはXcodeだけで頑張って見る予定。

まずは、kernel/main.cあたりから読んで行けばいいのかな?OSに限った話じゃないが、初学者がある程度の規模のソフトのソースを読む際は、どっから読んでいいのか非常に困る所である。

ま、適当に読んで行くとしましょうか。

Decomo 23:36 comment (0) trackback (0)

2007年07月01日(日)

 

三重とX11

 
http://decomo.info/wiki/blog/2007/2007-07-01に移行しました。

実務実習(所謂教育実習)で三重県は津市に来ております。

えー、江戸橋には何もありません。駅前にローソン+があります。しかし、それしかありません。でもまぁ、宿泊先のネット回線が光なのでヨシとします。ちなみに、三重までは今日営業を開始したばかりの新幹線、N700系に乗って参りました。1本前の新幹線は空席が目立ったのに対し、俺が乗ってきたのは指定席もほぼ満席でした。

さて、宿に着いて早々、取り立てのN700の写真をうpすべく、編集しようと思ったらGimpが入ってなかった。で、Gimpをダウンロードしてきて実行しようとしたら、X11が入ってなかった。あちゃー。入れたと思ったのになぁ。

Panther用のX11はAppleから落とせるんだが、Tiger用はというと「TigerのインストールDVDから入れてね」なーんて書いてある。ダメ元で先のX11を落としてみたが、やっぱりダメだった(インストーラのバージョンチェックではじかれる)。

これじゃデジカメ持ってきた意味がねぇ……と途方に暮れていた所、「Install X11 on Tiger without the Tiger install DVD」なるページを発見。曰く

The other day I was at school and I needed to install X11 on my intel mac in order to run an NX Client session into my linux box at home.

However, apple doesn’t seem to want to put the X11 User package for Tiger online anywhere… You can find the package for <=10.3 but what good is that!?

For anyone like me who doesn’t carry their Tiger install DVD at all times, I am going to put the X11 User and X11 SDK packages online.

だそうだ。うーん、素敵過ぎる。

というわけで、有り難くTiger用のX11をダウンロード&インストールし、無事Gimpを動かす事が出来ましたとさ。めでたしめでたし。

Decomo 19:32 comment (0) trackback (0)