Hey Mongoose,
I tried something the other day and had a similar side-effect. I wanted to make a dual-layered "starry night" sky sphere. I randomly placed dots all over a section of the screen, grabbed the image and textured my skyspheres.
The inner sky sphere needed to be transparent so I called dbSetObjectTransparency(objNum, 1) and BAM! I've got a halo around every star on the inner sky sphere. Changing the flag from 1 to 2 fixed it. I was just calling dbDot() to make my "stars" so there definitely shouldn't have been any anti-aliasing.
I didn't test any further, but I was looking at that and remembered your problem. I don't know if it'll help you or not, but maybe it's related.
Anyway, hope this helps!
-Frank
[edit]
Here's the code if you wanna check it out. I don't know if it'll give you any insight into your problem, but just in case... To see the halo effect change the very last line.
#include "DarkGDK.h"
const int sky1 = 1;
const int sky2 = 2;
// function prototypes
void makeSkySphere(int obj1, int obj2, int img);
/******************************************************************************
* the main entry point for the application is this function
******************************************************************************/
void DarkGDK(void) {
float x, z;
// turn on sync rate and set maximum rate to 60 fps
dbSyncOn();
dbSyncRate(60); // lock the frame-rate to 60 fps
dbAutoCamOff();
dbHideMouse();
dbSetWindowOff(); // go into fullscreen
makeSkySphere(sky1, sky2, 1);
// our main loop
while (LoopGDK()) {
dbControlCameraUsingArrowKeys(0, 1.0, 1.0);
// since the camera doesn't move up and down we only need X and Z
x = dbCameraPositionX();
z = dbCameraPositionZ();
// position our sky spheres at the camera's location
dbPositionObject(sky1, x, 0, z);
dbPositionObject(sky2, x, 0, z);
// update the screen
dbSync();
}
// return back to windows
return;
}
/******************************************************************************
* Make a dual-layered sky sphere building the objects and image specified
******************************************************************************/
void makeSkySphere(int obj1, int obj2, int img) {
int i, r, g, b;
// the radius is negative so that the normals point inward instead of outward
dbMakeObjectSphere(obj1, -1000);
dbMakeObjectSphere(obj2, -1100);
// create a throw-away workspace bitmap (this is about the only reason I ever use bitmaps)
dbCreateBitmap(1, 256, 256);
// create our starry night texture
for (i = 0; i < 500; i++) {
// use a random color in the top 50% of the color range
r = dbRnd(127) + 128;
g = dbRnd(127) + 128;
b = dbRnd(127) + 128;
dbInk(dbRGB(r, g, b), 0);
// place our star
dbDot(dbRnd(255), dbRnd(255));
}
dbGetImage(img, 0, 0, 256, 256);
dbDeleteBitmap(1);
// set our current working bitmap back to 0 which is the screen
dbSetCurrentBitmap(0);
// texture our skysphere objects
dbTextureObject(obj1, img);
dbTextureObject(obj2, img);
// scale the textures so that we have more stars per face
dbScaleObjectTexture(obj1, 4, 4); //4x4 tiles per face
dbScaleObjectTexture(obj2, 8, 8); //8x8 tiles per face
// make the inner sphere transparent -- change option to 1 to see wierd blue halo
dbSetObjectTransparency(obj1, 2);
}
[/edit]