SDLスレ
■ このスレッドは過去ログ倉庫に格納されています
0001login:Penguin
01/11/11 17:59ID:u0HMN7qCSDLについてのスレッドです。
最新情報、参考になるソース、質問等
とりあえず、本山
http://www.libsdl.org/
0449名無しさん@そうだ選挙に行こう
04/07/11 07:05ID:VqfcMOHHありがとうございます。
>>447
>>448
作りかけのソースを削ったのでおかしくなってしまいました。
0450名無しさん@そうだ選挙に行こう
04/07/11 09:59ID:E7W22GHh0451N速に書き込めません。
04/07/11 10:18ID:wvsVVX1k何とかしてください
0452名無しさん@そうだ選挙に行こう
04/07/11 12:11ID:/yFc1fy2そんなときはあれだよ。 あれ。
0453名前は開発中のものです。
04/07/12 00:37ID:A2nXW2Noみたいに SDL_Surface* を引数に取る関数を呼ぶときに楽しようと思って、
class CSDLSurface {
...
operator SDL_Surface*() { return surface; } // surface は SDL_Surface*
などとクラス内に書いたんです。でも
Kanji_PutText( ... , screen, ... ); // screen は CSDLSurface
とやっても、VC.NETに
引数を 'CSDLSurface *' から 'SDL_Surface *' に変換できません
と怒られるし、(SDL_Surface*)screen とやってキャストして渡しても、クラスのアドレスが
そのまんま渡ってるみたいでうまくいきません。そもそもなんで operator をオーバーロード
してるのに型変換してくれないんでしゅか。
0454453
04/07/12 00:39ID:A2nXW2No0455名前は開発中のものです。
04/07/12 01:05ID:1R+yHQE6> Kanji_PutText( ... , screen, ... ); // screen は CSDLSurface
Kanji_PutText( ... , screen(), ... );
じゃないかい?
0456453
04/07/12 01:29ID:A2nXW2Noscreen()とやると、"関数には評価されません" と言われてしまいます、、
それと453に間違いがもう一つ
> Kanji_PutText( ... , screen, ... ); // screen は CSDLSurface
screenは CSDLSurface* です
0457名前は開発中のものです。
04/07/12 09:21ID:d4JCqMcp> screenは CSDLSurface* です
じゃ、
Kanji_PutText( ... , (*screen)(), ... );
Kanji_PutText( ... , screen->operator(), ... );
のどっちかじゃない?
0458453
04/07/12 23:23ID:A2nXW2Noどうもお手数かけてしまってすみませんでした。
Kanji_PutText(..., screen->operator SDL_Surface*(), ...);
でコンパイルは通ったんですが、よく考えてみるとどうやらscreenがポインタ
であることが原因だったようで、
CSDLSurface screen; // ポインタにするのをやめた
...
Kanji_PutText(..., screen, ...);
みたいに、普通にクラスを渡せばちゃんと SDL_Surface* に変換してくれるんですね。
これってC++の基本ですか? 恥ずかしいかも。
でもなんか、クラスをポインタでなく保持するのはよろしくない、みたいな文章をどこかで
読んだ気がして、それが引っかかってなんか気が進まないです、、
0459名前は開発中のものです。
04/07/13 00:35ID:yFmAkR9z大体予想通りの結果?長文スマソ。
#include <iostream>
using namespace std;
class Foo {};
class Bar {
Foo foo;
public:
operator Foo*() {return &(this->foo);}
};
void hoge(Foo* p_foo_)
{
cout << p_foo_ << endl;
}
int main(int argc,char* argv[])
{
Bar bar;
Bar* p_bar = &bar;
hoge(bar);
// hoge(bar()); // no match for call to `(Bar) ()'
// hoge(p_bar); // cannot convert `Bar*' to `Foo*' for argument `1' to `void hoge(Foo*)'
hoge(*p_bar);
// hoge((*p_bar)()); // no match for call to `(Bar) ()'
// hoge(p_bar->operator()); // `class Bar' has no member named `operator()'
return 0;
}
0460名前は開発中のものです。
04/07/13 03:32ID:P6ImUkzN0461名前は開発中のものです。
04/07/13 03:58ID:szTJAEHMポインタなら単純に参照を外すだけでいい
Kanji_PutText( ... , *screen, ... );
ただ、暗黙のキャストは怖いから、
楽しようと考えている程度なら、素直にGetterを作った方が良いと思う。
0462453
04/07/13 23:44ID:KSTvEm7j暗黙の型変換を故意に狙うのはよくないですね。それに、*screen で返って
くるのがポインタってのも直感的でないですし。結局
SDL_Surface* GetSurface() const { return surface; }
を加えました。
0463名前は開発中のものです。
04/07/21 22:14ID:yROlyeHQsurfaceって、オブジェクト毎に作って良いんだろうか?
今まで俗に言うスプライトみたいな扱い方してたんだが。
背景なら背景で、画像合成させて1つのsurfaceにするのが普通なんだろうか?
0464名前は開発中のものです。
04/07/22 01:54ID:OPZjuMp0とりあえず質問の意味がさっぱりわからん…
0465名前は開発中のものです。
04/07/22 12:31ID:sx+OGorQ0466名前は開発中のものです。
04/07/22 14:51ID:xASuzJAT0467名前は開発中のものです。
04/07/22 17:39ID:mpU5Xpvs0468名前は開発中のものです。
04/07/22 20:26ID:jpCxn5GA漏れも何を聞いとるのかよう判らんのだが取り敢えず、
喪前さんの考える「Surface を一つにまとめることの長所」を教えてくれんかいの。
察するに割とどっちでもいいような気がするんだが……。
0469名前は開発中のものです。
04/07/22 21:25ID:NOi9FMd0オーバーヘッドやメモリの断片化による効率低下などがあるのか?
ってところじゃないんですかね。
0470名前は開発中のものです。
04/07/22 21:27ID:mpU5Xpvs0471463
04/07/22 22:21ID:mBKaU+OVスクロールする背景部品3つを自分で合成したのと
そのままほっといて普通に処理させた方で試してみた。
結果、そのままほっといて普通に処理させたほうが早かった…
つまり、俺の書い処理の方がヘッポコでした。
メモリ使用量・動作速度でのメリットは全く無し、またsurfaceの数が
多すぎて判らなくなるなら、管理体制そのものを見直す方が良いっぽいです。
0472名前は開発中のものです。
04/07/22 22:42ID:xASuzJAT人間ダブルバッファをしたってこと?
0473名前は開発中のものです。
04/07/23 01:31ID:k28imbO0なるべく種類ごとぐらいにまとめておいた方がいんでないの
とSDL使ったこと無いやつが言ってみるテスト。
0474名前は開発中のものです。
04/07/26 13:45ID:cbiqvpsK0475名前は開発中のものです。
04/07/26 15:46ID:Z8i+sT7Z0476名前は開発中のものです。
04/07/29 02:24ID:kbrPCy1U標準で付いてくるサンプルも充実してて解かりやすいから、
入門ページをわざわざ作る人があまりいないのかな、とオモタ。
0477名前は開発中のものです。
04/08/02 11:44ID:uIIM7zIN落ちものゲーとか作るときって結構これがUIに関わってきますよね。
キーが押された時刻を覚えておいて、押されっぱなしのままX_秒経ったら
キーがまた押されたことにする、とかするんでしょうか。
SDL_EnableKeyRepeat()みたいなのもあったんですがうまく動いてくれないんですよね・・
0478名前は開発中のものです。
04/08/02 21:19ID:1kimllXS> キーが押された時刻を覚えておいて、押されっぱなしのままX_秒経ったら
> キーがまた押されたことにする、とかするんでしょうか。
うん。
0479名前は開発中のものです。
04/08/02 23:13ID:5gOr47iA自前で処理、に一票。
どっちみちキーボードとジョイスティックの両方で操作可能にしたいから、
自分で適当にラッパー書くのが楽だと思う。
0480名前は開発中のものです。
04/08/06 12:10ID:fX1V4XLW環境によっては激しく音質悪化するね…
だからといってバッファ多くすると遅延が・゚・(ノД`)・゚・。
0481名前は開発中のものです。
04/08/07 17:44ID:wc7qHVarそんなわけで、いっそSDL_sound + OpenALとかでシステム組んで
公開してくれたりすると嬉しいです(と、人まかせ)。
0482名前は開発中のものです。
04/08/07 18:00ID:sO/xVe9hhttp://zinnia.dyndns.org/~zinnia/sdl/watch2/?date=20040730#p02
草案の本体がどこにあるのかちょっとわからなかったんだけど、
やるとしたら2.0の様子を見た方がいいんじゃないかな。
0483名前は開発中のものです。
04/08/08 12:36ID:n15LlEy5まだ草案段階なんだったら、待つ必要ないんじゃない?
これから、
細部の詰め -> α -> β -> リリース
と行くと何年後になるやら。
0484名前は開発中のものです。
04/08/09 19:20ID:lqi/7vlXRubyで生成した画像データをGUIに表示したいんだけどdraw〜なメソッドで描いていたらやたら時間がかかりそうだし
Surface.loadはファイルしかロードできないし…
0485名前は開発中のものです。
04/08/09 22:02ID:suCCLB3hRuby/SDL はよくしらないけど、
SDL_CreateRGBSurfaceFrom に相当するメソッドは存在しないの?
SDL_CreateRGBSurface は SDL::Surface.new に置き換わっているようだけど。
0486484
04/08/09 23:55ID:lqi/7vlX>SDL_CreateRGBSurfaceFrom に相当するメソッドは存在しないの?
う〜ん…displayFormatあたりだろうか…
実験してみます。
0487484
04/08/10 16:19ID:ojobLfTUチュートリアルにサンプルがありました。どうやらサーフィス→サーフィスなメソッドのようです。
う〜ん…1ピクセルずつ書いていくしかないのか…_| ̄|○
0488名前は開発中のものです。
04/08/10 19:03ID:og4arkOY0489名前は開発中のものです。
04/08/11 17:50ID:DHS7JU0v使えるよ。
0490名前は開発中のものです。
04/08/11 18:10ID:fjnBF2CCRuby/SDL のソースをざっと見てみたが、SDL_CreateRGBSurfaceFrom は無いようだな。
処理時間云々を気にするなら Ruby 以外も検討してみるといいかも知れん。
>>488
SDL_BlitSurface はあるが、引数に Surface をとるからな。
>>484 の場合手元にあるのはメモリ上のデータだから、それを Surface にする手段が欲しいんじゃないか?
0491名前は開発中のものです。
04/08/11 23:45ID:uIr8FGgs同人とかで売っても大丈夫なのですか?
0492名前は開発中のものです。
04/08/12 01:11ID:1Ox6RoRS動的リンクをして使うんだよね?
それなら、SDL.DLLのソースの入手方法さえ用意すればOK。
具体的には、そのソースを同梱するとか、本家のサイトのアドレスを説明書に入れとくとか。
LGPLライセンスについて、調べてみるべし。
0493名前は開発中のものです。
04/08/12 03:39ID:GXLAlDtL俺は実際同人で売ってる。
で、CDの中にSDL.dllのバイナリの他に
SDL-1.2.7.tar.gz
LGPL
を入れてある。
0494名前は開発中のものです。
04/08/12 21:36ID:U24wpCkA0495491
04/08/12 23:53ID:wAr6hdR2動的リンクで使う予定です。
入手方法もしくはソースを同梱すればOKなんですね。勉強になりました。
LGPLがいまいち理解できなくて、いつまでも踏み出せずにいました。
ありがとうございました。
実際やろうとしていた事をズバリやっている493氏のような人物も居て励みになります。
0496名前は開発中のものです。
04/08/17 01:08ID:2NQFsJZQこれ日本語入力はどうすればよいのだろう?
まだalfontは導入していないがデフォルトで日本語の表示は可能だし、
guiクラスに入力用のtextboxが用意されているようだが日本語は無理だ。
SDLは一応sdlskkなぞあるようだが。
Gtk+やTkからテキストウィジェットだけ拝借してくるしかないのかな。
0497名前は開発中のものです。
04/08/17 02:39ID:NkMI/CJfつーか何故SDLのスレでAllegroの質問をしますか。
0498名前は開発中のものです。
04/08/17 21:22ID:Mr02eSkK拡大したときに下と右が削れる。
俺だけ?
0499名前は開発中のものです。
04/08/18 00:14ID:O0wT/ab0http://pc5.2ch.net/test/read.cgi/gamedev/1008220559/
0500名前は開発中のものです。
04/08/19 06:31ID:88YaKIPR0501名前は開発中のものです。
04/08/19 06:40ID:O1yTQBZf0502名前は開発中のものです。
04/08/19 23:51ID:6l6QpGXx無いんじゃないかなぁ。
SDL_SetVideoMode()時に覚えておくぐらいしか。
あと、>>501のよりも>>421のが良いかも。
0503500
04/08/20 10:57ID:csZBm7g+サイズ変更させたくなかったんですけど妥協しときます。
ありがとうございました。
0504名前は開発中のものです。
04/08/20 12:05ID:LiSmyfUa0505名前は開発中のものです。
04/08/20 16:46ID:esCldzWy……なんか間違えてないか?
SDL_GetVideoSurface() だけで事足りると思うんだが。
SDL_Surface* screen = SDL_GetVideoSurface();
printf("width, height: %d, %d\n", screen->w, screen->h);
みたいな。おれがなんか間違えてんだろうか……。
0506名前は開発中のものです。
04/08/20 22:03ID:JqCl1DGvSDL_BlitSurfaceのSDL_Rect *dstrectってw,hが無視されてしまうし。
困った困った。
0507498
04/08/21 00:43ID:ELGMlgiiソースとなるサーフィスのサイズはぴったりではいけないようだ。
余裕を持たせたら削れなくなった
0508名前は開発中のものです。
04/08/21 01:17ID:wDjE80nxSGEを使う手がある(sge_transform)。
http://www.etek.chalmers.se/~e8cal1/sge/index.html
正直、俺もネイティブSDLで使える方法があったら知りたいです
0509500
04/08/21 01:20ID:diBViIiVwinAPIのGetSystemMetrics(SM_CXSCREEN)みたいな。
0510名前は開発中のものです。
04/08/21 10:32ID:FvC1IsvOSDL_SoftStretch は?あまし勧められた API でも無いみたいだけど。
>>509
SDL_ListModes は?一番大きいのを取れば多分良いかな…
0511名前は開発中のものです。
04/08/21 22:11ID:H0unQWjVこれはいったいどこの部分にSDLを使っているのでしょうか??
ソースを見た限りではウインドウ表示ぐらいしかしていないような…。
ご存知の方いませんか??
というか、SDLがどういうライブラリなのかいまいち分かっていないです…ごみんなさい。
因みにSDL関係の関数(?)をウマーくOpenGLの関数などに置き換えたら、
SDL抜きの日本語表示ができました…!?何故だ〜〜?
0512505
04/08/21 22:19ID:qlUWPwIqああ、そういうことか。すまん、SDL_FULLSCREEN を前提にしちまった。
しかしそうなると >>502-503 の発言が判らないんだが。
「サイズ変更」ってのは SDL_SetVideoMode かと思ったんだが、
それでディスプレイのサイズがとれるのか……?
SDL の Windows 部分のソースを適当に眺めたんだが、GetSystemMetrics(SM_CXSCREEN) は
DX5_SetVideoMode と DIB_SetVideoMode (どっちも SDL_SetVideoMode の下請け) でしか使ってないな……。
両方ウィンドウを画面中央に表示するために使ってるだけだし。
SDL_ListModes は EnumDisplaySettings か IDirectDraw2_EnumDisplayModes の結果を使ってるから、
これもやっぱり「現在の」画面解像度はとれそうにない。
……やたら長文なだけで全然解決案にならんなorz
>>510
SDL_ListModes の一番大きいの、おれは使ってないな……。
1600x1200 で使うと字が小さすぎて目が痛くなるorz
>>511
……お前さん SDL_kanji と gl_kanji を間違えてないか?
0513名前は開発中のものです。
04/08/21 22:34ID:H0unQWjV>>512さん
間違えてないですよ。gl_kanjiも
#include <SDL.h>
#include <SDL_opengl.h>
ってなっています。
ウインドウ表示もSDL_SetVideoModeでやっていますし。
ひょっとしたらこれだけにSDLを用いているのかなーと思いまして。
0514505
04/08/21 23:18ID:qlUWPwIqいや、おれは gl_kanji, SDL_kanji はおろか OpenGL も弄ったことのない軟弱者なんだが、でもやっぱりなんか違うと思うぞ。
今 gl_kanji を落として軽く見てみたが、
SDL 関係のヘッダを include してるのは、変換ツールとかサンプルとかのソースだろう?
gl_kanji の本体(?)は gl_kanji.cc と gl_kanji.h だけで、その二つは SDL とは関係ないんじゃないか。
つーか gl_kanji の readme.txt 読んでくれ。断言はできんがお前さん相当とっけんはっけんな質問してるような気がする。
SDL 判ってないっていうから念の為書いておくと、SDL と OpenGL の組み合わせには、
1. SDL 単体で使う、2. OpenGL 単体で使う、3. SDL から OpenGL を使う、って三種類あるぞ。
で OpenGL を使う気なら、gl_kanji つーのも選択肢に入ってくるだろうが、
OpenGL 抜きの SDL だけで日本語表示がしたいなら、
SDL_kanji か SDL_ttf を使うことになると思う。
どうでもいいがお前さん、2ch じゃメール欄に sage って書く癖つけておいた方がいいぞ。
……また無駄に偉そうな長文になってしまったorz
0515名前は開発中のものです。
04/08/21 23:52ID:H0unQWjV失礼しました…m(_ _)m
gl_kanji.ccのヘッダに
#include <SDL.h>
#include <SDL_opengl.h>
と記述してあるのはI-Saintさんのgl_kanjiです。
多分、オリジナルのとはちょっと違うのかもしれません。
...あ、しかもgl_kanji.ccのヘッダではなくtestgl_kanji.cppのヘッダ
でした…申し訳ないです、お騒がせいたしました…orz
もう二度とプログラミングには手をつけませんから許してください。
0516名前は開発中のものです。
04/08/22 00:00ID:HGFZMTgG冗談だと思うけど…
がんがれ!
んな事(゚ε゚)キニシナイ!!でプログラム書きまくれ!
0517508
04/08/22 00:02ID:pseiC9zkおお、そんな隠しAPIがあるとは知らなかったですよ。thanks
とりあえずソースからコピればGPLとしては使えるわけか。
ぐぐってみたら、メーリングリストに506氏と同じ疑問が書いてあって
面白かった。
ttp://www.libsdl.org/pipermail/sdl/2001-March/034394.html
0518506
04/08/22 01:04ID:WvVrOjz5サンクス。sge_transform_surfaceってやつですかね。
今のところ拡大・縮小だけ必要なのでsgl入れるのは気が進まないです。
自作した方が良いのかなあ…
>>510
SDL_SoftStretch、検索してみたけどうまく見つかりません。
もうちと捜索してみます。
0519名前は開発中のものです。
04/08/22 23:02ID:WvVrOjz5フルスクリーンではfpsがリフレッシュレートと同じになったんですが、ウィンドウモードではとんでもなく多くなります。
アニメーションはSDL_GetTicksの値を利用しているので、早くなったりすることは無いですが、CPU時間は猛烈に食っていますよね。
ウィンドウ時になにか対策したほうがいいですか?
0520名前は開発中のものです。
04/08/23 01:09ID:JruymYaP次のフレームまでの間に時間が余ってる間はSDL_Delay(0)でループさせるとか。
0521名前は開発中のものです。
04/08/23 02:20ID:4IY4L0bN付属のサンプルがうまく動いてくれない・・・。
kanji_PutTextは問題なく動いてるっぽいのだが、
kanji_CreateSurfaceで作ったサーフェイスを
SDL_BlitSurfaceで転送しようするとアクセスバイオレーションとか言われてしまう。
環境は
Win2000
VC6.0
SDL-1.2.7(本家から落としてきたVC6用のバイナリ)
です。
何故わかる人アドバイスprz
0522名前は開発中のものです。
04/08/23 23:37ID:vOt8qlrp全く同じ環境だったから SDL_kanji_f1b 落としてきて試してみたんだが、普通に動くな……。
デバッガで追っかけて、具体的に何がバイオレーションを起こしてるのか探ってみるといいかも。
screen は kanji_PutText とかでも使ってるし text は kanji_CreateSurface 内でエラーチェックがあるから、
少なくともポインタが NULL になることはなさそうなんだがなあ。
0523名前は開発中のものです。
04/08/25 21:13ID:EcBBkrxHエラー E2342 ..\..\src\video\windib\sdl_dibevents.c
189: パラメータ 'lpPrevWndFunc' は int (__stdcall *)() 型として定義されているので
long (__stdcall *)(void *,unsigned int,unsigned int,long) は渡せない
(関数 DIB_HandleMessage )とかいうエラーメッセージを吐いて出来ませんでした。
とりあえず該当箇所のソースを見て自分で直そうとしたのですが、見てみても
それらしき記述が発見できず…。
誰かどこを直せばいいかアドバイスお願いします。
一応環境は
Win98
BCC5.5.1
SDLのバージョンは安定版の1.2.7です。
0524521
04/08/26 00:18ID:bQrcHUhrわざわざ試してくれてサンクス。
デバッガで追ってみたけどkanji_CreateSurfaceも成功してて、
SDL_BlitSurfaceの中まで行ったけどアセンブラばっかりで
よく分からなかったよ・・・。
日本語表示には別の方法考えるか・・・。
>>523
BCCは使ってないのでワカランのだが、
VC6用のバイナリ一式をimplibでBCC用に書き換える
っていうのじゃダメなん?
0525名前は開発中のものです。
04/08/26 01:04ID:c70JkN3E適当に環境構築して試してみた。おれの環境は Win2k なんだが、
それ以外は一緒だから多分参考になると思う。Win2k + BCC5.5.1 + SDL-1.2.7 。
お前さんの言うエラーの lpPrevWndFunc は、CallWindowProc の第一引数の仮引数名だ。
そのエラーは winuser.h 内の Call〜 の定義のせいで出てる。で STRICT つーマクロを定義しとけば大丈夫。
つまり、Borland\freebcc\SDL.mak の 66 行目(辺り)の、
USERDEFINES = WIN32;BUILD_SDL;__FREEBCC__; ...
ってなってるその行の最後に「STRICT;」って書き足せばオッケーだ。
本当はその次の行にある SYSTDEFINES から NO_STRICT を消す必要があると思うんだが、
なんでか残したままでも問題なかったな。
で実はこれをクリアしても他にも問題が出てきた。それも適当に対処できたから次に続く。
0526525 の続き
04/08/26 01:23ID:c70JkN3E「Error: 外部シンボル '_SDL_HasMMX' が未解決(.\SDL-1.2.7\SRC\VIDEO\SDL_BLITN.OBJ が参照)」
みたいなエラーが来る。これは SDL_cpuinfo.c に定義されてるんだが、
SDL_cpuinfo.c のコンパイルが makefile にまるで書いてないのが原因。
なので、Borland\freebcc\SDL.mak の 70 行目(辺り)の
PATHCPP = .;..\..\src; ...(以下略)
ってなってる行の最後に「;..\..\src\cpuinfo」を追加して、
後 50 行目(辺り)の
..\..\src\video\SDL_blit.obj
に書き足して、
..\..\src\video\SDL_blit.obj ..\..\src\cpuinfo\SDL_cpuinfo.obj
にすればビルドできる。SDL-1.2.7\test\ に SDL.dll と SDL.lib が出来てるはず。
本当は SDLmain.mak にも間違いがあってビルドできんのだけど、
>>523 の implib で解決するんならそっちでやってくれい。
……ああ、やっぱり長文になってもうた。
0527名前は開発中のものです。
04/08/26 14:19ID:JtN6FZlLありがとうございます。何故かmakeはILinkで止まってしまいましたが…。
SDLのソースをちょっと弄って使いたい場合はimplibだと無理ですよね?
色々ぐぐってみたところ
ttp://www.mediawars.ne.jp/~freemage/progs/sdl/sdl4bcc.html
にSDLmain.libの修正方法が書いてありましたがSDL_dibevents.c
辺りを弄って使いたい場合にはどうすればいいのでしょうか…
そういえばmakeはobjファイルを参照しているということは一度ソースから
objファイルを生成してからmakeしないと変更が反映されないんですかね?
makeの仕組みが未だによく分かってません…。
0528525
04/08/26 19:11ID:c70JkN3Eうん? ILink で止まるから >>526 を書いたんだが……。
SDL_dibevents.c を弄っても SDL_main.lib にゃ関係ないと思うぞ?
影響が出るのは SDL.lib の方だけだと思うから、
SDLmain.lib は Borland\lib\ にある奴でいいんじゃないか。
SDL_dibevents.c を弄りたいんなら好きに弄って make -f SDL.mak でいいと思う。
SDL_dibevents を弄りたいっていうと、DIB_CreateWindow とか書き換えて、
フルスクリーンで解像度変えた時の他ウィンドウのサイズ保持とかやりたいのかしらん。
>そういえばmakeはobjファイルを参照しているということは
……その辺勝手にやってくれるから便利なんだと思うぞ。
0529名前は開発中のものです。
04/08/26 22:50ID:JtN6FZlLいや、SDLからIMEの文字列を取得しようと思ったんですが、そのままだと
メッセージが取得できないらしくて、少しソースを書き換える必要が出てきたんですよ。
何にせよとりあえずはこれでうまく出来そうです。ありがとうございました。
0530sgi rocks
04/08/27 00:50ID:fcNUInF8日本語入力のあたりでどうしようか考えてしまっています。
SDLは素晴らしいのですが、日本語入力が絡んで来ると、
せっかくマルチプラットフォームなのが有効に利用できないので、
皆で、SDLで動く日本語入力機構を作りませんか?
各々のOSの入力機構を使うか、それそのものを作るかもなにも決まってませんが、
今のところ、WindowsではIME、LinuxではXIMかIIIMFを使うといいかな、
と思っていたりします。
0531名前は開発中のものです。
04/08/27 10:41ID:hR9vryWf前にもそういう話はあったみたいだけど、
SDL でそういうことをやるのは結構難しいみたいだね。
俺も前ちょっと調べて同じことやろうとしたんだけど、
IME 関連のプログラミングの経験浅いからいまいちよくわかんないんだよね。
入力内容を勝手に描画してくれるのも悪くないとは思うけど、
もうちょっとプリミティブに現在の変換状況を取得できるような作りは厳しいかな。
0532529
04/08/27 17:05ID:pn3VuAxVC++でSDL使ったプログラムを書くときに何か注意するところはあるでしょうか?
というのも、書いたプログラムをメイクしてみると
Error: 外部シンボル '_main' が未解決(E:\BCC55\LIB\C0X32.OBJ が参照)
という何だか?なエラーが発生して少し困っているところなのです。
ちなみに、コンパイル時には-WC、-DDEBUG;WIN32をつけてコンパイルしました。
(他にも色々あったのですがとりあえず関係ありそうなものだけあげました)
0533名前は開発中のものです。
04/08/27 17:09ID:ED0DtQy80534名前は開発中のものです。
04/08/27 17:57ID:cER7lJgy0535531 ◆pm4Rr1N8T6
04/08/27 18:27ID:hR9vryWfうーん、すっげー適当な調査しかしてないんだけど、処理の流れとしては
1.SDL_GetWMInfo() でウィンドウシステム固有の情報を受け取る
2.IME が処理してる情報をコールバックで拝借する
3.共有 API によってウィンドウシステムに依存しない情報を得られるようにする
って感じが良さそうな気がする。
共有 API で取得できるべき情報はこんなとこだろうか。
・現在の漢字入力の ON/OFF
・現在入力中の文字列
・変換確定を行ったかどうかの情報
・確定後の文字列
わー、よくわからない!
結局変換中の小さいウィンドウを出す座標も設定出来ないと駄目だよなー。
Qt のソースでも読もうかな。
↓続く
0536531 ◆pm4Rr1N8T6
04/08/27 18:28ID:hR9vryWfSDL_SysWMinfo の定義には
・X11
・Nano-X
・Win32
・RiscOS
があるね。
BeOS とか Amiga とかは最初は無視しといていいかな。
Mac はどうしよう。随分前に調べたんだけど情報を見付けることができなかった。
情報リンク
http://home.catv.ne.jp/pp/ginoue/im/index.html
日本語入力プログラミング
http://www.hmug.org/man/3/XmbLookupString.html
XmbLookupString() の man (ごめん、UNIX よくわからない)
http://www.kumei.ne.jp/c_lang/sdk3/sdk_278.htm
IME の操作@猫でもわかるプログラミング
0537sgi_rocks
04/08/28 00:26ID:IBxR98vc共通のAPIを提供しておいて、そのAPIが各々のOSの
ネイティブな入力機構を使うのに賛成です。
Mac OS Xに関しては、X11を使っている場合に限っては、
Linuxなどと同じX11経由の入力機構が使えると思います。
私はLinuxでSDLを動かしているので、X11(XIM経由)を少しやってみます。
0538sgi_rocks
04/08/28 02:14ID:IBxR98vcそれらを含めたSDLを使ったGUIを提供した方が良いのでしょうか?
入力している時の、変換候補などの表示や、入力欄の事を考えると、
そこだけ他のGUIと違ってしまうのも変な感じがしなくもないのです。
簡単なGUIも一緒に提供するのも良いかもしれない、と思うのですがどうでしょう。
0539529
04/08/28 13:34ID:D9fRqR5kとりあえずmainはSDL_mainに置換されるという話なのでもちろんint main(int argc, char* argv[])
は書いているのですが、それでもError: 外部シンボル '_main' が未解決(E:\BCC55\LIB\C0W32.OBJ が参照)
が表示されるというのは謎ですね…。このエラーメッセージが何を言っているかがいまいちよく分からないのですが、
多分システムからコールバックされるべき_main、が無いってことなんですかね?
SDLmain.libでそっちの方が定義されてるはずなのに…orz
>>538
私は完璧に素人なのでこんなことにコメントするのもちとあれなのですが、
GUIごと提供してくれるとかなり便利そうな気もしますね。
0540名前は開発中のものです。
04/08/28 15:30ID:YZXmLvihとりえあず日本語入力機構だけを提供した方がいいと思います.
GUIは結局アプリケーション作る人次第な気がするので…
0541名前は開発中のものです。
04/08/28 15:58ID:QqhNTGOxよくあのペースで発表・発売できるもんだよ。
俺も将来はあのくらいの会社をもちたい。
0542名前は開発中のものです。
04/08/28 16:01ID:QqhNTGOx誤爆です。
0543531 ◆pm4Rr1N8T6
04/08/28 16:23ID:doDxlGS3GUI 部分はあとからでも付け足せるから先に入力機構だけでいいんじゃないかな。
と思いながら Win32 部分を作ってたんだけどさ、
まさか編集可能なウィンドウ(テキストボックスなど)が付いてないと
IME を入力可能状態にできないウィンドウシステムってある?
どうも上手くいかないんだけど、Win32 とかはそうなってるのかな。
うーん、ちょっと怖いなあ。GUI セットじゃないと厳しいかな。
とりあえず共通 API は、
・ネイティブな C で書く
・初期化関数で構造体を生成してポインタを返し、終了関数で開放
・ポリモーフィズムは構造体内に関数へのポインタを保持することで実装
・各処理系ごとにプリプロセッサで分岐し、初期化関数内の処理を切り分ける
って感じでいいかな。
SDL 本体内部の SDL_rwops や、多くの SDL 系ライブラリで使用されてる方法だから、
ソースを読めばもっと具体的な実現方法は把握できると思う。
ある程度各処理系の情報、実装の方向性がまとまってきたら、
共通 API を作るためのフレームワークを実装するよ。
一応 smpeg みたいな例もあるし、C++ で書いても問題は無いと思うけど、どっちがいいかな。
0544529
04/08/29 10:00ID:o5xfi0oD公式ページからSDL.dllをダウンロードしてきてimplibでSDL.libを生成して、
SDL_win32_main.cをコンパイルしてSDL_main.libを作っても駄目でした。
最近のソースにはBorland用のライブラリ一式があるんですがあれは使っていいのでしょうかね?
Error: 外部シンボル '_main' が未解決(E:\BCC55\LIB\C0X32.OBJ が参照)
もう見飽きた…orz
0545名前は開発中のものです。
04/08/29 12:50ID:dvcQQr7Q一応、念のため聞いておくが、
SDL.libはリンクしているけどSDL_main.libをリンクし忘れているなんてことは無いよな?
0546名前は開発中のものです。
04/08/29 14:02ID:iNpWlI3a-L/usr/local/lib -lmingw32 -lSDLmain -lSDL -mwindows
0547名前は開発中のものです。
04/08/29 14:57ID:dvcQQr7Qそれ、cygwinの場合でしょ?>>529の場合はbccらしいから同じとは限らないし。
0548名前は開発中のものです。
04/08/29 15:00ID:dvcQQr7Q■ このスレッドは過去ログ倉庫に格納されています