static constexpr inline matrix<T,4,4,true,V> _make(const _dT& z, const _dT& t) noexcept { return _make(normalized(cross(z, t)), z, t); }
static constexpr inline matrix<T,4,4,true,V> _make(const _dT& z) noexcept { return _make(z, _dT::make(z.z(), T(0),-z.x())); }
static constexpr inline matrix<T,4,4,true,V> _make(const _dT& y, const _dT& z, const _dT& t) noexcept { return _make(cross(y, z), y, z, t); }
constexpr inline matrix<T,4,4,RM,V> operator()(void) const noexcept { return _make(bool_constant<RM>()); }
constexpr inline matrix<T,4,4,false,V> _make(std::false_type) const noexcept { return reorder(_make(std::true_type())); }
constexpr inline matrix<T,4,4,true,V> _make(std::true_type) const noexcept { return _make(normalized(_e-_t)); }
/** * @glsymbols * @gldefref{DEPTH_BUFFER_BIT} */ inline ClrBits DepthBuffer(void) { return _make(GL_DEPTH_BUFFER_BIT); }
/** * @glsymbols * @gldefref{COLOR_BUFFER_BIT} */ inline ClrBits ColorBuffer(void) { return _make(GL_COLOR_BUFFER_BIT); }
/** * @glsymbols * @gldefref{STENCIL_BUFFER_BIT} */ inline ClrBits StencilBuffer(void) { return _make(GL_STENCIL_BUFFER_BIT); }
uint8_t NeXTMatrix::scan() { //_delay_ms(20); //next_kbd_set_leds(false, false); NEXT_KBD_LED1_OFF; _is_modified = false; if (!NEXT_KBD_PWR_READ) { _make(NEXT_KBD_PWR_KEYCODE); _power_state = 1; if (_is_modified) { dprintf("Power state 1\n"); } } else { _break(NEXT_KBD_PWR_KEYCODE); _power_state = 0; if (_is_modified) { dprintf("Power state 0\n"); } } uint32_t resp = (next_kbd_recv()); if (resp == NEXT_KBD_KMBUS_IDLE) { return 0; } NEXT_KBD_LED1_ON; next_kbd_set_leds( NEXT_KBD_PRESSED_SHIFT_LEFT(resp) ? true : false, NEXT_KBD_PRESSED_SHIFT_RGHT(resp) ? true : false ); dprintf("[ r=%04lX keycode=%02X pressed=%X CTRL=%X SHIFT_LEFT=%X SHIFT_RGHT=%X CMD_LEFT=%X CMD_RGHT=%X ALT_LEFT=%X ALT_RGHT=%X ]\n", \ resp, \ NEXT_KBD_KEYCODE(resp), \ NEXT_KBD_PRESSED_KEYCODE(resp), \ NEXT_KBD_PRESSED_CONTROL(resp), \ NEXT_KBD_PRESSED_SHIFT_LEFT(resp), \ NEXT_KBD_PRESSED_SHIFT_RGHT(resp), \ NEXT_KBD_PRESSED_CMD_LEFT(resp), \ NEXT_KBD_PRESSED_CMD_RGHT(resp), \ NEXT_KBD_PRESSED_ALT_LEFT(resp), \ NEXT_KBD_PRESSED_ALT_RGHT(resp) \ ); // Modifier keys don't return keycode; have to check the upper bits NEXT_KBD_MAKE_OR_BREAK(ALT_RGHT, 0x51); NEXT_KBD_MAKE_OR_BREAK(ALT_LEFT, 0x52); NEXT_KBD_MAKE_OR_BREAK(CMD_RGHT, 0x53); NEXT_KBD_MAKE_OR_BREAK(CMD_LEFT, 0x54); NEXT_KBD_MAKE_OR_BREAK(SHIFT_RGHT, 0x55); NEXT_KBD_MAKE_OR_BREAK(SHIFT_LEFT, 0x56); NEXT_KBD_MAKE_OR_BREAK(CONTROL, 0x57); NEXT_KBD_MAKE_OR_BREAK(KEYCODE, NEXT_KBD_KEYCODE(resp)); return 1; }