1

Ubuntuの異端児の下でX11R6-7.0をコンパイルしようとしていますが、自分で解決できない奇妙なコンパイルエラーが発生しました。

ati Catalystドライバーは新しいxorgをサポートしておらず、ossドライバーはハードウェアの3Dアクセラレーションをサポートしていないため、X11R6-7.0が必要でした。

このエラーメッセージの意味を知っている人はいますか?私はいくつかのCを知っていますが、少し混乱しました。GET_FB_DATAマクロが返されたのですかNULL、それともメソッド/プロパティが設定されていないのですか?

この時点でプリプロセッサ定義を「デバッグ」する方法についてのさらなる洞察は素晴らしいでしょう。で役立つものは何も印刷できないと思います#error

私が得るエラー:

tdfx_span.c:関数'tdfxDDWriteDepthPixels':
tdfx_span.c:976:エラー:代入の左オペランドとして左辺値が必要
tdfx_span.c:1008:エラー:代入の左オペランドとして左辺値
tdfx_span.c:関数' write_stencil_pixels':
tdfx_span.c:1242:エラー:代入の左オペランドとして左辺値が必要です

コード:

958-   switch (depth_size) {
959-   case 16:
960-      GetBackBufferInfo(fxMesa, &backBufferInfo);
961-      /*
962-       * Note that the _LOCK macro adds a curly brace,
963-       * and the UNLOCK macro removes it.
964-       */
965-      WRITE_FB_SPAN_LOCK(fxMesa, info,
966-             GR_BUFFER_AUXBUFFER, GR_LFBWRITEMODE_ANY);
967-      {
968-     LFBParameters ReadParams;
969-     GetFbParams(fxMesa, &info, &backBufferInfo,
970-             &ReadParams, sizeof(GLushort));
971-     for (i = 0; i < n; i++) {
972-        if (mask[i] && visible_pixel(fxMesa, x[i], y[i])) {
973-           xpos = x[i] + fxMesa->x_offset;
974-           ypos = bottom - y[i];
975-           d16 = depth[i];
976:           PUT_FB_DATA(&ReadParams, GLushort, xpos, ypos, d16);
977-        }
978-     }
979-      }
980-      WRITE_FB_SPAN_UNLOCK(fxMesa, GR_BUFFER_AUXBUFFER);
981-      break;
982-   case 24:

そして相対マクロ:

#define GET_FB_DATA(ReadParamsp, type, x, y)                        \
   (((x) < (ReadParamsp)->firstWrappedX)                            \
        ? (((type *)((ReadParamsp)->lfbPtr))                        \
                 [(y) * ((ReadParamsp)->LFBStrideInElts)            \
                   + (x)])                                          \
        : (((type *)((ReadParamsp)->lfbWrapPtr))                    \
                 [((y)) * ((ReadParamsp)->LFBStrideInElts)          \
                   + ((x) - (ReadParamsp)->firstWrappedX)]))
#define GET_ORDINARY_FB_DATA(ReadParamsp, type, x, y)               \
    (((type *)((ReadParamsp)->lfbPtr))                              \
                 [(y) * ((ReadParamsp)->LFBStrideInElts)            \
                   + (x)])
#define GET_WRAPPED_FB_DATA(ReadParamsp, type, x, y)                \
    (((type *)((ReadParamsp)->lfbWrapPtr))                          \
                 [((y)) * ((ReadParamsp)->LFBStrideInElts)          \
                   + ((x) - (ReadParamsp)->firstWrappedX)])
#define PUT_FB_DATA(ReadParamsp, type, x, y, value)                        \
    (GET_FB_DATA(ReadParamsp, type, x, y) = (type)(value))
#define PUT_ORDINARY_FB_DATA(ReadParamsp, type, x, y, value)              \
    (GET_ORDINARY_FB_DATA(ReadParamsp, type, x, y) = (type)(value))
#define PUT_WRAPPED_FB_DATA(ReadParamsp, type, x, y, value)                \
    (GET_WRAPPED_FB_DATA(ReadParamsp, type, x, y) = (type)(value))

LFBParameters構造体

483-typedef struct
484-{
485-   void *lfbPtr;
486-   void *lfbWrapPtr;
487-   FxU32 LFBStrideInElts;
488-   GLint firstWrappedX;
489-}
490:LFBParameters;
4

3 に答える 3

0

いいえ、確かにこれはポインタがであるためではありません0。これは、タイプが間違っていることを示しています。メッセージにあるように、代入の左側に左辺値が必要です。(これは正常に聞こえますね?)

どういうわけか、マクロの1つがポインター値を返し、それを逆参照することができないと思います。

于 2011-01-02T13:25:34.800 に答える
0

マクロは次のように展開されます。

(
(
  ((xpos) < (&ReadParams)->firstWrappedX) ?
  (((GLushort *)((&ReadParams)->lfbPtr)) [(ypos) * ((&ReadParams)->LFBStrideInElts) + (xpos)])
  :
  (((GLushort *)((&ReadParams)->lfbWrapPtr)) [((ypos)) * ((&ReadParams)->LFBStrideInElts) + ((xpos) - (&ReadParams)->firstWrappedX)])) = (GLushort)(d16)
);

だから基本的にそれはやっています(のようなもの):

   ((GLushort *)((&ReadParams)->lfbWrapPtr))[SOME_INDEX] = (GLushort)(d16);

私はそれが正しくないと思い、問題を引き起こしています。これはあなたが期待していることですか?

于 2011-01-02T17:49:34.050 に答える
0

おそらくこれを聞きたくないでしょうが、X11R6はほとんどの標準で古くからあります。どのビデオカードをお持ちですか。また、なぜfglrxが必要なのですか。壁を見ると、fglrxを必要とするATI/AMDチップセットはありません。ケイマンのような最新のチップセットだけがそれを必要とし、それらのチップセットのfglrxはとにかくX11R6上に構築されません。

とにかく、これを絶対に行うことを主張する場合は、おそらく--with-dri-drivers = swrastを使用してmesaをビルドする必要があります。これにより、tdfx_driなどのドライバーがビルドされなくなります。確かに、加速する必要のあるブードゥーはありませんよね?:3

于 2011-03-13T19:42:29.303 に答える