int GGI_quartz_setgamma(struct ggi_visual *vis,double r,double g,double b) { ggi_quartz_priv *priv; const CGGammaValue min = 0.0f, max = 1.0f; priv = QUARTZ_PRIV(vis); if (r == 0.0) { r = FLT_MAX; } else { r = 1.0f / r; } /* if */ if (g == 0.0) { g = FLT_MAX; } else { g = 1.0 / g; } /* if */ if (b == 0.0) { b = FLT_MAX; } else { b = 1.0 / b; } /* if */ if ( CGDisplayNoErr == CGSetDisplayTransferByFormula (priv->display_id, min, max, (CGGammaValue)r, min, max, (CGGammaValue)g, min, max, (CGGammaValue)b) ) { return 0; } else { return -1; } /* if */ } /* GGI_quartz_setgamma */
BOOL LLWindowMacOSX::setGamma(const F32 gamma) { CGGammaValue redMin; CGGammaValue redMax; CGGammaValue redGamma; CGGammaValue greenMin; CGGammaValue greenMax; CGGammaValue greenGamma; CGGammaValue blueMin; CGGammaValue blueMax; CGGammaValue blueGamma; // MBW -- XXX -- Should we allow this in windowed mode? if(CGGetDisplayTransferByFormula( mDisplay, &redMin, &redMax, &redGamma, &greenMin, &greenMax, &greenGamma, &blueMin, &blueMax, &blueGamma) != noErr) { return false; } if(CGSetDisplayTransferByFormula( mDisplay, redMin, redMax, gamma, greenMin, greenMax, gamma, blueMin, blueMax, gamma) != noErr) { return false; } return true; }
int main (int argc, const char * argv[]) { CGError err; CGGammaValue redMin, redMax, redGamma, greenMin, greenMax, greenGamma, blueMin, blueMax, blueGamma; printf("setting up connection on UDP port 4740\n"); printf("server accepts 3 values of 0 to 127 that\n"); printf("are applied to the screen.\n"); // Current Gamma settings: err = CGGetDisplayTransferByFormula (0, &redMin, &redMax, &redGamma, &greenMin, &greenMax, &greenGamma, &blueMin, &blueMax, &blueGamma); (void) signal(SIGINT, sigcatch); // Setup network: int port = 4740; sock = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP ); if ( sock <= 0 ) { printf( "failed to create socket\n" ); return false; } sockaddr_in address; memset(&address, 0, sizeof(address)); address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons( (unsigned short) port ); if ( bind( sock, (const struct sockaddr *)&address, sizeof(sockaddr_in) ) < 0 ) { printf( "failed to bind socket\n" ); return false; } // just for the hell of it CGDisplayForceToGray(true); while ( true ) // wait for packet { sockaddr_in from; socklen_t fromLength = sizeof( from ); gammaFractions gammaPacket; // process received packet int rxbytes=recvfrom(sock,(char*)&gammaPacket, sizeof(gammaPacket),0,(const struct sockaddr*)&from,&fromLength); if ( rxbytes <= 0 ) continue; //unsigned int from_address = ntohl( from.sin_addr.s_addr ); //unsigned int from_port = ntohs( from.sin_port ); printf("recieved packet, bytes: %d\n", rxbytes); printf("red: %x, green: %x, blue: %x\n", gammaPacket.red, gammaPacket.green, gammaPacket.blue); err = CGSetDisplayTransferByFormula (0, redMin, ((1.0/127)*gammaPacket.red )*redMax, redGamma, greenMin, ((1.0/127)*gammaPacket.green)*greenMax, greenGamma, blueMin, ((1.0/127)*gammaPacket.blue )*blueMax, blueGamma); } return 0; }