Better camera noise on frontends without camera support
This commit is contained in:
parent
f9b13c66b1
commit
29a3b18186
@ -1,26 +1,26 @@
|
|||||||
#include "gb.h"
|
#include "gb.h"
|
||||||
|
|
||||||
static signed noise_seed = 0;
|
static uint32_t noise_seed = 0;
|
||||||
|
|
||||||
/* This is not a complete emulation of the camera chip. Only the features used by the GameBoy Camera ROMs are supported.
|
/* This is not a complete emulation of the camera chip. Only the features used by the Game Boy Camera ROMs are supported.
|
||||||
We also do not emulate the timing of the real cart, as it might be actually faster than the webcam. */
|
We also do not emulate the timing of the real cart, as it might be actually faster than the webcam. */
|
||||||
|
|
||||||
static uint8_t generate_noise(uint8_t x, uint8_t y)
|
static uint8_t generate_noise(uint8_t x, uint8_t y)
|
||||||
{
|
{
|
||||||
signed value = (x + y * 128 + noise_seed);
|
uint32_t value = (x * 151 + y * 149) ^ noise_seed;
|
||||||
uint8_t *data = (uint8_t *) &value;
|
uint32_t hash = 0;
|
||||||
unsigned hash = 0;
|
|
||||||
|
|
||||||
while ((signed *) data != &value + 1) {
|
while (value) {
|
||||||
hash ^= (*data << 8);
|
|
||||||
if (hash & 0x8000) {
|
|
||||||
hash ^= 0x8a00;
|
|
||||||
hash ^= *data;
|
|
||||||
}
|
|
||||||
data++;
|
|
||||||
hash <<= 1;
|
hash <<= 1;
|
||||||
|
if (hash & 0x100) {
|
||||||
|
hash ^= 0x101;
|
||||||
}
|
}
|
||||||
return (hash >> 8);
|
if (value & 0x80000000) {
|
||||||
|
hash ^= 0xA1;
|
||||||
|
}
|
||||||
|
value <<= 1;
|
||||||
|
}
|
||||||
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long get_processed_color(GB_gameboy_t *gb, uint8_t x, uint8_t y)
|
static long get_processed_color(GB_gameboy_t *gb, uint8_t x, uint8_t y)
|
||||||
|
Loading…
Reference in New Issue
Block a user