SDL + Xlib

segfault의 이미지

저 밑에 SDL에서 XIM을 쓰는 방법을 질문했었는데요,

XIM에 관련된 함수 원형을 찾아보니

XIM XOpenIM(display, db, res_name, res_class)
Display *display;
XrmDatabase db;
char *res_name;
char *res_class;

이런 식으로 되어 있더군요.

Display라던지 XrmDatabase는 Xlib에서 쓰는 구조로 알고 있는데

SDL에서 Xlib를 어떻게 연동시켜서 사용할 수 있는지 궁금합니다.

segfault의 이미지

저는 SDL에서 어떻게 Xlib와 연동시킬수 있는지를 질문했습니다.

"저 밑" 쓰레드와 관련이 있는 것 같지는 않습니다.

cdpark의 이미지

"저 밑"이 어딘지 궁금해서 찾아서 붙였을 뿐입니다. :(

ageldama의 이미지

Display를 얻으면 대략 가능하다고 생각하고 글을 적습니다.

SDL 소스에서 src/video/쪽을 살펴보시면, 전역변수로 'current_video'를 사용하고 있습니다.

실제로 개발자를 위해 공개되지는 않습니다.
적당히 SDL 소스로부터 src/video/SDL_sysvideo.h를 추가하고 사용하길 원하시는 소스에서 extern으로 접근하실 수 있을겁니다.

또한 이 구조체의 필드중에 hidden 포인터는 video subsystem별로 플랫폼에 의존적인 값들을 저장하도록 합니다. struct SDL_PrivateVideoData입니다. 각기 다른 구현별로 다른 구조를 하고 있답니다. x11video서브시스템의 경우에는 X11_Display와 GFX_Display를 정의하고 있네요.

기본적으로 상당히 조잡한 방법이지만 이렇게 Display에 접근할 수 있다면 나머지 부분은 어떻게 되지 않을까 싶습니다. (xlib를 잘몰라서요;;; )

#include "SDL/SDL.h"
#include "SDL_sysvideo.h"
#include "SDL_x11video.h"
#include <stdio.h>
#include "X11/Xlib.h"

extern SDL_VideoDevice* current_video;

int main(int argc, char** argv)
{
        SDL_Surface* disp = NULL;
        struct SDL_PrivateVideoData* dat = NULL;
        SDL_Init(SDL_INIT_VIDEO);
        disp = SDL_SetVideoMode(640, 480, 0, 0);
        printf("%p[%s]\n", current_video, current_video->name);
        dat = (struct SDL_PrivateVideoData*)current_video->hidden;
        /* ... */
        SDL_Quit();
        return 0;
}

("SDL_sysvideo.h", "SDL_x11video.h"은 SDL 소스에서 복사해 온겁니다;;; )

gcc -o hentai hentai.c `sdl-config --libs --cflags` -I. -I/usr/X11R6/include

어쨌든 상당히 조잡하고 같은 x11환경이라고 하더라도 dga, xv... 조금만 달라져도 제대로 작동하지 않을겁니다.;;;
결국 커스텀하게 패치된 SDL로 통째로;;;

제 생각엔 XIM을 이용하는 방법보다는 한글 오토마타 등을 직접 작성하는 방법이 좋을 것 같습니다.

(그런데 iimf인가 그거는 대충 x11이나 이미 있는 기술들에만 적용되는 그런거지요? 추상적인 입력기를 구현하거나 하지는 않지요?)

SDL에서 중립적인 입력기를 구현하는 것도 재미있을 것 같습니다. (예전에 구상해보다가 능력부족으로;;; )

----
The future is here. It's just not widely distributed yet.
- William Gibson

feanor의 이미지

SDL-IM이라고 일본 사람이 SDL에 XIM을 붙인 패치가 있는 것 같은데 더이상은 잘 모르겠습니다.

http://morihyphen.hp.infoseek.co.jp/prog/sdl-im.html

--feanor

krisna의 이미지

저는 SDL은 X11에 종속적이지 않다고 알고 있습니다.
아마도 그러니까 XIM을 붙이는 건 SDL에서 X11 구현 부분에서 하는 것이 바른 방향이 겠지요.

IIIMF는 X11에 종속적인 부분이 없습니다. 그래서 X가 아닌 곳에서도 사용 가능합니다. 따라서 XIM을 붙일 거라면 iiimf를 붙이는 편이 더 좋긴 할것 같습니다.

그리고 오토마타를 직접 붙이는 작업은 로컬 패치로 끝나기 쉽습니다. 그래서 저는 별로 추천하고 싶지 않네요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.